• 数组练习


    //
    //  main.c
    //  数组练习
    //
    //  Created by zhangxueming on 15/6/2.
    //  Copyright (c) 2015年 zhangxueming. All rights reserved.
    //
    
    #include <stdio.h>
    //#include <stdbool.h>
    
    //7.计算某个由英文、数字以及标点符号构成的数组的总宽度,其中英文字符的宽度为
    //1cm,数字宽度为 0.5cm、标点符号宽度为 0.8cm。
    //8.接上题,如果规定行的宽度为 10cm,将某个字符长度超过 50 的字符串截断,恰好 使 10cm 宽的行能容纳。输出这个被截断的子数组。
    //rtyuiopgfdfgjfghjklkjh
    float getCharacterWidth(char ch)
    {
        if ((ch>='A' && ch<='Z') || (ch>='a' && ch<='z')) {
            return 1.0;
        }
        else if(ch>='0' && ch<='9')
        {
            return 0.5;
        }
        else
        {
            return 0.8;
        }
    }
    
    //int main(int argc, const char * argv[]) {
    //    char str[100]={};
    //    int cnt =0;
    //    float length = 0.0;
    //    
    //    for (int i=0; i<100; i++) {
    //        scanf("%c",&str[i]);
    //        if (str[i]=='
    ') {
    //            str[i]='';
    //            break;
    //        }
    //        cnt++;
    //    }
    //    int i=0;
    //    for (; i<cnt; i++) {
    //        length+= getCharacterWidth(str[i]);
    //        if (length>10.0) {
    //            str[i]='';
    //            break;
    //        }
    //    }
    //    
    ////    for (int j=0; j<i; j++) {
    ////        printf("%c", str[j]);
    ////    }
    //    printf("%s
    ", str);
    //    return 0;
    //}
    
    //13.给定一个 5 个元素构成的整型数组,每个元素的值都在 0-9 之间,按照位置将其组成一个 5 位数并输出,例如 int a[5] = {1,2,2,3,7};则输出 73221。
    //num = 7
    //num*10+3 = 73
    //num*10+2 = 732
    //num*10+2 = 7322
    //num*10+1 = 73221
    //int main(int argc,const char *argv[])
    //{
    //    int a[5]={};
    //    int num = 0;
    //    for (int i=0; i<5; i++) {
    //        scanf("%d", &a[i]);
    //    }
    //    for (int i=4; i>=0; i--) {
    //        num = num*10+a[i];
    //    }
    //    printf("num = %d
    ", num);
    //    return 0;
    //}
    
    //18.判断一个整型数组是否是对称数组,例如a[6]={1,2,3,3,2,1}和{1,6,8,1,8,6,1}都是对称数组。
    typedef enum {
        false,//0
        true  //1
    }bool;
    
    bool isSymmetryArray(int a[], int len)
    {
        for (int i=0; i<len/2; i++) {
            if (a[i]!=a[len-i-1]) {
                return false;
            }
        }
        return true;
    }
    
    //int main(int argc,const char *argv[])
    //{
    //    int a[6]={1,2,3,3,2,1};
    //    printf("%d
    ", isSymmetryArray(a,6));
    //    return 0;
    //}
    
    //30.给定一个英文句子,单词之间用 1 个空格分开,求出第 2 个单词的偏移位置。例如
    //“Professor du comes from Korea”的偏移位置是 10。
    
    //int main(int argc,const char *argv[])
    //{
    //    char str[100]={};
    //    scanf("%[^
    ]", str);
    //    //scanf("%[A-Z,a-z,0-9]",str);
    //    //printf("%s", str);
    //    int i=0;
    //    while (str[i]) {
    //        if (str[i]==' ') {
    //            break;
    //        }
    //        i++;
    //    }
    //    printf("%d",i+1);
    //
    //    return 0;
    //}
    
    //43.围圈报数
    //有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡报到m的人退出圈子,问最后留下的是原来第几号的哪位.
    //0 0 0 1 0  3
    
    //int main(int argc,const char *argv[])
    //{
    //    int a[100]={};
    //    int n,m;
    //    int cnt=0;//统计出局的人数
    //    int k=0;//报数
    //    int i=0;
    //    scanf("%d%d", &n, &m);
    //    if (n<0||n>100) {
    //        return -1;
    //    }
    //    
    //    for (i=0; i<n; i++) {
    //        a[i]=1;
    //    }
    //    i=0;
    //    while (cnt<n-1) {
    //        if (a[i]) {
    //            k++;
    //            if(k==m)
    //            {
    //                a[i]=0;
    //                k=0;
    //                cnt++;
    //            }
    //        }
    //        i++;
    //        if (i==n) {//判断边界
    //            i=0;
    //        }
    //    }
    //    for (i=0; i<n; i++) {
    //        if (a[i]) {
    //            printf("%d", i+1);
    //            break;
    //        }
    //    }
    //    return 0;
    //}
    
    //猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
    //10  1
    //9   (1+1)*2  4
    //8   (4+1)*2  10
    
    int func(int n)
    {
        if (n==10) {
            return 1;
        }
        else if(n>10)
        {
            return 0;
        }
        return (func(n+1)+1)*2;
    }
    
    //int main(int argc, const char *argv[])
    //{
    //
    //    printf("%d
    ", func(8));
    //    
    //    return 0;
    //}
    
    //4..输入10个数,找出出现次数最多的数 (如果多个并列,则按数字出现顺序分别输出)
    //比如:a[10]=
    //输入:1 2 2 3 4 5 6 7 8 9
    //输出:2
    //数据结构: 定义一个整型数组 int count[10] 存储每个元素的个数, 开始时每个元素个数初始化为1
    //
    //算法:
    //(1) 利用双层循环, 每一个元素都与后面一个元素比较, 如果两者相同, 则该元素次数+1,
    //(2) 以上的算法中两个相同的元素的次数是一样的, 优化如下, 比较两个元素的时候, 如果两者相等, 则该元素次数+1, 后面的元素次数设置为0, 比较的时候再判断这个元素是否已经比较
    //
    //伪代码:
    //
    //定义数组保存每个元素次数
    //
    //使用双层循环遍历数组
    //如果当前元素后后面元素相等, 并且后面的元素次数不为0
    //当前元素次数+1, 后面的元素次数设置为0
    //
    //从保存每个元素次数的数组中查找最大的值
    
    //a[10]=
    //1 2 2 5 4 5 2 7 5 9
    //count[10]
    //1 3 0 2 1 0 0 1 1 1
    
    
    int main(int argc,const char *argv[])
    {
        int a[10]={};
        int cnt[10]={};
        for (int i=0; i<10; i++) {
            scanf("%d", &a[i]);
        }
        for (int i=0;i<10; i++) {
            cnt[i]=1;
        }
        
        for (int i=0; i<10; i++) {
            if (cnt[i]) {
                for (int j=i+1; j<10; j++) {
                    if (a[i]==a[j]) {
                        cnt[i]++;
                        cnt[j]=0;
                    }
                }
            }
        }
        
    //    for (int i=0; i<10; i++) {
    //        printf("%d ", cnt[i]);
    //    }
        
        //查找cnt数组中的最大值
        int max = cnt[0];
        for (int i=1; i<10; i++) {
            if (max<cnt[i]) {
                max = cnt[i];
            }
        }
    
        //输出数值
        for (int i=0; i<10; i++) {
            if (max==cnt[i]) {
                printf("%d ", a[i]);
            }
        }
        return 0;
    }
  • 相关阅读:
    day7 面向对象 静态方法 类方法 属性方法 类的特殊成员方法 元类 反射 异常处理
    day6 面向对象 封装 继承 多态 类与实例在内存中的关系 经典类和新式类
    day5 time datetime random os sys shutil json pickle shelve xml configparser hashlib subprocess logging re正则 python计算器
    kafka常用操作命令
    linux基础
    django学习1——初识web应用程序
    mysql数据库(三)——pymysql模块
    mysql数据库(二)——表的查询
    mysql数据库(一)
    Python常用模块——re模块
  • 原文地址:https://www.cnblogs.com/0515offer/p/4547170.html
Copyright © 2020-2023  润新知