HDU 1004单线寻找哪种颜色最多

Let the Balloon Rise

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 123288 Accepted Submission(s): 48595

Problem Description
Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the judges’ favorite time is guessing the most popular problem. When the contest is over, they will count the balloons of each color and find the result.

This year, they decide to leave this lovely job to you.

Input
Input contains multiple test cases. Each test case starts with a number N (0 < N <= 1000) – the total number of balloons distributed. The next N lines contain one color each. The color of a balloon is a string of up to 15 lower-case letters.

A test case with N = 0 terminates the input and this test case is not to be processed.

Output
For each case, print the color of balloon for the most popular problem on a single line. It is guaranteed that there is a unique solution for each test case.

Sample Input
5
green
red
blue
red
red
3
pink
orange
pink
0

Sample Output
red
pink


思路

1、C用strcmp来比较两个字符串是否相等,若相等计数器加1,计数器利用数组。C++可用结构体利用string直接进行比较,计数器利用结构体中的属性
2、C输出出现最多次的颜色利用寻找max的方法,C++也是如此

C解法

#include <stdio.h>
#include <string.h>
int main()
{
    int h;
    int j;
    int t;
    scanf("%d",&h);
    while(h)
    {
        char s[1000][16]={0};
        char s2[15]={0};
        int a[1001]={0};
        int max=0;
        if(h<0)
        {
            break;
        }
        for(j=0;j<h;j++)
        {

            scanf("%s",s[j]);
            if(strlen(s[j])>15)
            {
                continue;
            }
        }
        for(j=0;j<h;j++)
        {
            for(t=j+1;t<h;t++)
            {
                if(strcmp(s[t],s[j])==0)
                {
                    a[t]++;
                }
            }
        }
        j=0;
        max=a[j];
        strcpy(s2,s[j]);
        for(j=1;j<h;j++)
        {
            if(a[j]>max)
            {
                max=a[j];//注意
                strcpy(s2,s[j]);
            }
        }
        printf("%s\n",s2);
        scanf("%d",&h);
    }
    return 0;
}

刚开始一直WA。后来发现最后max=a[j]这句忘写了


C++解法(OJ选C++)

#include <iostream>
#include <string>
using namespace std;
struct ballon{
    string color;
    int ColorNum;
};
int main()
{
    ballon *input;
    int n;
    string str="null";
    while(cin>>n&&n)
    {
        char s[1001];
        int max=0;
        int Max_i;
        int Max_color;
        input=new ballon[n];
        for(int i=0;i<n;i++)
        {
            cin>>input[i].color;
            input[i].ColorNum=1;
        }
        for(int j=0;j<n;j++)
        {
            for(int i=j+1;i<n;i++)
            {
                if(input[j].color==input[i].color)
                {
                    input[i].ColorNum++;
                }
            }
        }
        Max_color=0;
        for(int j=0;j<n;j++)
        {
            if(input[j].color==str)
                continue;
            else if(input[j].ColorNum>Max_color)
            {
                Max_color=input[j].ColorNum;
                Max_i=j;
            }
        }
        cout<<input[Max_i].color<<endl;
        delete [] input;
    }
    return 0;
}

用C++写是为了顺便复习下C++和结构体、还有new、delete这块


总结

1、刚开始遇到个问题就是为什么定义了字符数组的大小,输入时超过了数组大小也可以输出(基础不扎实),然后后来问了度娘才想起来:C语言不检查数组越界行为
2、new的基本格式以及用法

 一般使用格式:
格式1:指针变量名=new 类型标识符;
格式2:指针变量名=new 类型标识符(初始值);
格式3:指针变量名=new 类型标识符 [内存单元个数];
  说明:格式1和格式2都是申请分配某一数据类型所占字节数的内存空间;但是格式2在内存分配成功后,同时将一初值存放到该内存单元中;而格式3可同时分配若干个内存单元,相当于形成一个动态数组。

3、过程中不小心翻了个小错误,color用了char类型,str用的是string类型。导致程序错误
4、不一定要strcmp\strcpy等这些库函数,也可以利用C++下的string类下来比较字符串
5、在C解法下有一个比较笨拙的一个问题就是最后输出我是将结果又放在了新的字符数组中,其实不需要。只需要将那个索引值得到后还是从原来的字符数组中输出即可,就是C++输出的解法
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;、 3本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看ReAdmE.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值