赞
踩
题目就不粘了,说说我的思路吧。这道题还是比较容易的,用一般的思路去做复杂度是完全允许的。
我是用【1001】【16】的二维数组存的数据,遍历数组并和d数组比较,每出现一个新颜色就加入d【i】【16】,并将发f【i】变成1,如果是已经出现的颜色,只需将f相应位置加一,最后只需遍历f找到最大值max,然后输出d[m].
【注】字符串操作用strcmp,strcpy
下边是ac的代码:
#include<stdio.h> #include<string.h> int main(){ int n; while(~(scanf("%d",&n))){ if(n==0) return 0; //s输入,出现一个颜色就写入d,并在f下标相对应位置加一 即f存放的是每种颜色存放的次数 char s[1001][16],d[1001][16]; int f[1001]={0},i,j,k; int max=0,m; //数量最多的颜色及对应下标 for(i=0;i<n;i++){ scanf("%s",s[i]); } strcpy(d[0],s[0]); f[0]=1; j=1; for(i=0;i<n;i++){ for(k=0;k<j;k++){ //之前出现过,加一 if(!strcmp(s[i],d[k])){ f[k]++; break; } } if(k==j){ //出现了一个新颜色,加入d的末尾 strcpy(d[j],s[i]); f[j]++; j++; } } for(i=0;i<j;i++){ //找到数量最多的颜色 if(f[i]>max){ max=f[i]; m=i; } } printf("%s\n",d[m]); } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。