一、
/*(1)怎样计数,存储,比较 答:只存储需要输出的出现最多的颜色的次数 ,进行一个动态变化
那么怎么使得颜色和次数对应呢 每次动态变化时不仅仅是次数 同时还有标记颜色的i */
#include<stdio.h>
#include<string.h>
#define N 1001
int main()
{
int T=1,n,s,max,i,j,x;/*max赋初值为-1的精妙之处,保证第一次比较max和x即可做调整 ,但不应在此赋值 */
// char a[N];//[N];
char a[N][N];//为何需要用二维数组?
while(T)//while(scanf("%d",&n)!=EOF&&n)
{
scanf("%d",&n);
if(n==0)
T=0;
else
{
for(i=0;i<n;i++)
scanf("%s",a[i]);// (2)怎样读入颜色字符
max=-1;/*max在此赋初值-1是为了保证每一大轮开始初值都是-1,与在前赋值意义不一样 */
for(i=0;i<n;i++)
{
s=0;/*s在此赋初值为0的意义在于每一小轮 开始都从0开始,注意s和max赋初值的位置 */
for(j=i+1;j<n;j++)/*在冒泡的基础上再用x标记次数最值所代表的颜色i */
{
if(strcmp(a[i],a[j])==0)
s++;
if(s>max)
{
max=s;
x=i;
}
}
}
printf("%s\n",a[x]);
}
}
}
二、
#include<stdio.h>
#include<string.h>
#define N 1001
int main()
{
int n,i,j,k,s,max;
char a[N][N];
while(scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
scanf("%s",a[i]);
max=-1;
for(i=0;i<n;i++)
{
s=0;
for(j=i+1;j<n;j++)
{
if(strcmp(a[i],a[j])==0)
s++;
if(s>max)
{
max=s;
k=i;
}
}
}
printf("%s\n",a[k]);
}
}