数组练习

//

//  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 宽的行能容纳。输出这个被截断的子数组。

//rtyuiopgfdfgj\0fghjklkjh

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]=='\n') {

//            str[i]='\0';

//            break;

//        }

//        cnt++;

//    }

//    int i=0;

//    for (; i<cnt; i++) {

//        length+= getCharacterWidth(str[i]);

//        if (length>10.0) {

//            str[i]='\0';

//            break;

//        }

//    }

//    

////    for (int j=0; j<i; j++) {

////        printf("%c", str[j]);

////    }

//    printf("%s\n", 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\n", 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\n", 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("%[^\n]", 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\n", 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;

}

 

你可能感兴趣的:(数组)