算法提高 色盲的民主  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  n个色盲聚在一起,讨论一块布的颜色。尽管都是色盲,却盲得各不相同。每个人都有自己的主张,争论不休。最终,他们决定采取民主投票的方式决定布的颜色,不管布同不同意。某种颜色用字符串表示(字符串为颜色单词或词组,也就是可能有被空格隔开的两个单词组成的颜色词组),只要字符串不同,程序即判断颜色不同。现在给出这n个人所选择的颜色,输出最有可能的颜色(也就是获得投票最多的颜色),如果有多个颜色获得了最多的投票,则将它们按字典序分行全部输出。
输入格式
  第一行一个正整数n,表示色盲的人数
  接下来n行,每行一句话
输出格式
  若干行,获得投票最多的颜色,按字典序输出
样例输入
5
red
blue
black
black
blue
样例输出
black
blue
数据规模和约定
  n<=1000
  颜色单词最多20个字符,只包含小写字母或者空格
  对于char s[20],由于cin >> s是读取到空格处便会结束,也就是对于light red,用cin只能输入light。如果要整个输入一行,则使用cin.getline(s, 20),其中20为这一行的最大长度,也就是你的s的容量,如果容量为30,则cin.getline(s, 30)。
  另外,你在cin>>n以后cin.getline(s,30)应该会得到一个空字符串,这是因为整数n后面的换行符还未被输入。
 
作者注释:当看到“字典排序”,就想到用结构体,用qsort来做,还是掌握的不牢固,在大牛的指导下结合之前做过的题完成了代码。思路和细节看代码注释。
 #include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
/*定义一个结构体:包括定义颜色的名称及其个数*/
typedef struct Color{
char color[];//不同的颜色
int num;//每个颜色的个数
}col;
int cmp(const void *a,const void *b){
col c = *(col*)a;
col d = *(col*)b;
//按数量的多少对颜色名称进行字典排序
if(c.num == d.num){
return strcmp(c.color,d.color);
}else{
return d.num - c.num;
}
}
int main(){
col co[];//定义结构体数组
char color[];//颜色单词最多20个字符
int re=;//表需要排序的颜色个数,初值为0
int n;//数据组数
scanf("%d",&n);
for(int i=;i<n;i++){
int j=;//下标
//输入一个颜色单词
scanf("%s",&color);
//先判断有没有存着此颜色
for(j=;j<re;j++){
if(strcmp(color,co[j].color)==)
break;
}
//若已经存了,该颜色数量+1
if(re!=j){
co[j].num++;
}
//若没有存,此时存进去
else{
strcpy(co[re].color,color);
co[re].num=;//改颜色的数量为1
re++;//需要排序的颜色个数+1
}
}
//排序
qsort(co,re,sizeof(co[]),cmp);
for(int i=;i<n;i++){
if(co[i].num == co[].num){
printf("%s\n",co[i].color);
}
}
return ;
}

上述过程在思路上没有问题,但是对于本题提交是不通过的——错在数据的处理的细节上。

%s:格式化字符串,不能接收回车换行空格符;

gets():用于从读入一个整行,以'\n'或EOF结束;

getchar():用于读入一个字符,并返回这个字符.

对于本题:输入n后有一个换行,而且每个颜色后都有一个换行,因此要注意用getchar()来接收换行,用gets(),接收数据。

 /*
注意:%s不能接收空格、回车;
getchar()可以消除回车、空格符;
gets()一般与getchar()配合使用。
*/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
/*定义一个结构体:包括定义颜色的名称及其个数*/
typedef struct Color{
char color[];//不同的颜色
int num;//每个颜色的个数
}col;
int cmp(const void *a,const void *b){
col c = *(col*)a;
col d = *(col*)b;
//按数量的多少对颜色名称进行字典排序
if(c.num == d.num){
return strcmp(c.color,d.color);
}else{
return d.num - c.num;
}
}
int main(){
col co[];//定义结构体数组
char color[];//颜色单词最多20个字符
int re=;//表需要排序的颜色个数,初值为0
int n;//数据组数
scanf("%d",&n);
getchar();//输入n后有一个回车,用getchar()处理掉
for(int i=;i<n;i++){
int j=;//下标
//输入一个颜色单词
// scanf("%s",&color);
gets(color);//%s不能处理回车换行空格符,而此题每个数据都有一个换行,用gets接收
//先判断有没有存着此颜色
for(j=;j<re;j++){
if(strcmp(color,co[j].color)==)
break;
}
//若已经存了,该颜色数量+1
if(re!=j){
co[j].num++;
}
//若没有存,此时存进去
else{
strcpy(co[re].color,color);
co[re].num=;//改颜色的数量为1
re++;//需要排序的颜色个数+1
}
}
//排序
qsort(co,re,sizeof(co[]),cmp);
for(int i=;i<n;i++){
if(co[i].num == co[].num){
printf("%s\n",co[i].color);
}
}
return ;
}

C语言 · 色盲的民主的更多相关文章

  1. Java实现 蓝桥杯VIP 算法提高 色盲的民主

    算法提高 色盲的民主 时间限制:1.0s 内存限制:256.0MB  色盲的民主 问题描述 n个色盲聚在一起,讨论一块布的颜色.尽管都是色盲,却盲得各不相同.每个人都有自己的主张,争论不休.最终,他 ...

  2. Python 为何能坐稳 AI 时代头牌语言

    原文链接:https://mp.weixin.qq.com/s?__biz=MzI0ODcxODk5OA==&mid=2247487055&idx=2&sn=ca0fe8740 ...

  3. 驳2B文 "我为什么放弃Go语言"

      此篇文章流传甚广, 其实里面没啥干货, 而且里面很多观点是有问题的. 这个文章在 golang-china 很早就讨论过了. 最近因为 Rust 1.0 和 1.1 的发布, 导致这个文章又出来毒 ...

  4. R语言 ggplot2包

    R语言  ggplot2包的学习   分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将 ...

  5. 基于R语言的结构方程:lavaan简明教程 [中文翻译版]

    lavaan简明教程 [中文翻译版] 译者注:此文档原作者为比利时Ghent大学的Yves Rosseel博士,lavaan亦为其开发,完全开源.免费.我在学习的时候顺手翻译了一下,向Yves的开源精 ...

  6. 【译】从 Rust 到不只是 Rust:PHP 语言领域

    From Rust to beyond: The PHP galaxy 译文 原文地址:https://mnt.io/2018/10/29/from-rust-to-beyond-the-php-ga ...

  7. C语言 · 高精度加法

    问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...

  8. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  9. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

随机推荐

  1. 对于不返回任何键列信息的 selectcommand 不支持 updatecommand 的动态 sql 生成

    大家知道,DataSet保存的数据是位于服务器内存里面的原数据库的“副本”.所以用DataSet更新数据的过程就是先对“副本”进行更新,然后 在将“原本”更新,按照我的理解就是把“原本”覆盖掉.具体到 ...

  2. spark.mllib源代码阅读-优化算法1-Gradient

    Spark中定义的损失函数及梯度,在看源代码之前,先回想一下机器学习中定义了哪些损失函数,毕竟梯度求解是为优化求解损失函数服务的. 监督学习问题是在如果空间F中选取模型f作为决策函数.对于给定的输入X ...

  3. PMD-Java 代码检查工具对 error 和 warning 的配置

    PMD是一款优秀的Java程序代码检查工具.该它可以检查Java代码中是否含有未使用的变量.是否含有空的抓取块.是否含有不必要的对象等. 但在使用过程中,你会项目中发现存在大量的 PMD 插件报出的 ...

  4. junit 用法实例

    package com.zy.junit.test; import org.junit.After;import org.junit.AfterClass;import org.junit.Befor ...

  5. JVM 入门三板斧

    一个JVM实例只存在一个堆内存,堆内存的大小是可以调节的.类加载器读取了类文件后,需要把类.方法.常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行,堆内存分为三部分: Young Ge ...

  6. mysql出现Too many connections的解决...

    最近写javaee项目的时候,mysql报了too many connections的错误,百度的内容有一些有问题,所以我重新写一下我的解决方法. mysql -u root -p 回车输入密码进入m ...

  7. CentOS 7.3 安装指南

    摘要: 基于 Red Hat 企业版的源代码的最新版本的 CentOS 7 在今年的 12月发布了 CentOS Linux 7 (1611),包含了许多 bug 修复.新的包更新,比如 Samba. ...

  8. ELK 的插件安装(head)

    这里我装了一个head插件和kopf的插件 ./plugin install mobz/elasticsearch-head ./plugin install lmenezes/elasticsear ...

  9. 比较有用的sql语句

    一.基础 .说明:创建数据库 CREATE DATABASE database-name .说明:删除数据库 drop database dbname .说明:备份sql server --- 创建 ...

  10. Hive怎样加入第三方JAR

    以增加elsaticsearch-hadoop-2.1.2.jar为例,讲述在Hive中增加第三方jar的几种方式. 1,在hive shell中增加 [hadoop@hadoopcluster78 ...