HDOJ-1004 统计颜色数量最多的气球(含完整C和Java代码)
题目如下图:
很容易能看懂的是:
- 输入时首先需要输入气球的数量n
- 然后,给出对应的n个颜色
- 输出颜色数量最多的气球颜色
- 要求实现可以在给出结果后自动进入下一次输入
- 以0结束程序
C语言代码如下:
#include<stdio.h> // 题目涉及到输入输出
#include<string.h> // 题目涉及到字符串处理
#define N 1001 //题目中说了哈,最多1000个气球,这里给到1001个,贼安全
#define COLOR_NAME_LENGTH 20 // 颜色的英文不会超过20个字母吧,我猜的…
int main(){
//初始化变量和数组
char color[N][COLOR_NAME_LENGTH];
int n,i,j,count[N],max,k;
//确定条件,根据题意,循环碰到0break,不然就继续自动要求输入
while((scanf("%d",&n))&&n!=0){
//输入n之后,给出n个气球分别的颜色
for(i=0;i<n;i++){
scanf("%s",&color[i]);
}
//每个气球的数量先统一给到0个
for(i=0;i<n;i++){
count[i]=0;
}
//通过最简单的两两比较,为color数组的count计数
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(strcmp(color[i],color[j])==0){
count[i]+=1;
}
}
}
//经典找最大值的方法
max = 0;
k = 0;
for(i=0;i<n;i++){
if(count[i]>max){
max = count[i];
k=i;
}
}
printf("%s\n",color[k]);
}
return 0;
}
Java代码如下:
import java.util.*;
public class HDOJ1004ANSWER{
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner cin = new Scanner(System.in);
while(cin.hasNextInt())
{
int num = cin.nextInt();
//输入0结束测试
if(num<=0)
break;
//输入测试数据
List<Item> items = new ArrayList<Item>();
for(int i = 0;i<num;i++){
String item = cin.next();
boolean flag = false;
for(int j = 0;j<items.size();j++){
//当前集合中包含输入的气球
if(items.get(j).str.equals(item)){
items.get(j).count+=1;
flag = true;
break;
}
}
//当前集合中不包含输入的气球
if(!flag){
items.add(new Item(item,1));
}
}
//找出最多气球的气球个数
int max = items.get(0).count;
for(int i = 1;i<items.size();i++){
if(items.get(i).count>max){
max = items.get(i).count;
}
}
//输出所有的最多的气球
for(int i = 0;i<items.size();i++){
if(items.get(i).count == max){
System.out.println(items.get(i).str);
}
}
}
}
}
class Item{
public String str;
public int count;
public Item(String s,int c){
str = s;
count= c;
}
}