当前位置:   article > 正文

杭电oj1004题

oj1004

题目就不粘了,说说我的思路吧。这道题还是比较容易的,用一般的思路去做复杂度是完全允许的。
我是用【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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/645560
推荐阅读
相关标签
  

闽ICP备14008679号