乒乓球
【问题描述】
华华最近对乒乓球比赛的统计数据进行了一些分析,首先将比赛每个球的胜负列成一张表,然后计算在11分制下双方的比赛结果(截至记录末尾)。
比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分): WWWWWWWWWWWWWWWWWWWWWWLW 在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。如果一局比赛刚开始,则此时比分为0比0。
你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。
【文件输入】
输入文件名为table.in,每个输入文件包含若干行字符串,字符串有大写的W、L和E组成。其中E表示比赛信息结束,程序应该忽略E之后的所有内容。
【文件输出】
输出文件名为table.out,有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。
【样例输入】
WWWWWWWWWWWWWWWWWWWWWWLWE
【样例输出】
11:0
11:0
1:1
2
3
代码
题目很简单,具体看代码
Click me to view the code
#include <cstdio>
#include <cstring>
char f[10000] ={0};
int main(){
int w=0,l=0;
int id =0; //id = index
int i,j;
scanf("%s",f);
int len = strlen(f);
while(id < len){
if(f[id] == 'W')
w++;
else if( f[id] == 'L')
l++;
if( l == 11 || w== 11){
printf("%d:%d\n",w,l);
l = w = 0;
}
id++;
}
//输出最后剩余
printf("%d:%d",w,l);
return 0;
}
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
国名排序
【问题描述】
小李在准备明天的广交会,明天有来自世界各国的客户跟他们谈生意,小李要尽快的整理出名单给经理看,清你帮助他把客户来自的国家按英文字典次序排好吗?例如小李手上有来自加拿大,美国,中国的名单,排好序的名单应是美国,加拿大,中国。
【文件输入】
第一行为一个n(n<=100)
表示n个国家,第2行到第n+1行分别为n个国家的名字。
【文件输出】
输出共n行,分别为n个国家按字典顺序的排列。
【样例输入】
3
China
Canada
America
2
3
4
【样例输出】
America
Canada
China
2
3
代码
题目很简单,具体看代码
Click me to view the code
#include <cstdio>
#include <cstring>
int n;
char tmp[111][100] = {0};
void qsort(int l,int r){
char key[100];
if(l < r){
int i =l,j=r;
strcpy(key,&tmp[l][0]);
while(i<j){
while( i<j && strcmp(&tmp[j][0],key)>=0) j--;
if(i < j) strcpy(&tmp[i++][0],&tmp[j][0]);
while( i<j && strcmp(&tmp[i][0],key) <=0) i++;
if(i < j) strcpy(&tmp[j--][0],&tmp[i][0]);
}
strcpy(&tmp[i][0],key);
qsort(l,i-1);
qsort(i+1,r);
}
}
int main(){
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++){//读入
scanf("%s",&tmp[i][0]);
}
qsort(1,n);
for(i=1;i<=n;i++)
printf("%s\n",&tmp[i][0]);
return 0;
}
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
题目 念数字
【问题描述】
编一个“念数字”的程序,它能让计算机完成以下工作:当你输入一个0至99之间的数后,计算机就会用汉语拼音印出这个数。如果输入的数不在0到99之间,就印出“CUO LE”。
【样例输入】
35
【样例输出】
SAN SHI WU
代码
Click me to view the code
#include <cstdio>
char shu[11][100] = {
{"LING"},
{"YI"},
{"ER"},
{"SAN"},
{"SI"},
{"WU"},
{"LIU"},
{"QI"},
{"BA"},
{"JIU"},
{"SHI"}
};
int n;
int main(){
scanf("%d",&n);
if( n < 0 || n > 99 ){
printf("CUO LE");
return 0;
}
if( n >=0 && n <= 10)
printf("%s",&shu[n][0]);
else if( n >10 && n <= 19 ){
printf("SHI ");
printf("%s",&shu[n%10][0]);
}
else if( n >=20 && n <= 99){
printf("%s ",&shu[n/10][0]);
printf("SHI");
if(n % 10 != 0){
printf(" %s",&shu[n%10][0]);
}
}
return 0;
}
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
笨小猴(NOIP2008提高)
【问题描述】
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
【输入文件】
输入文件word.in只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
【输出文件】
输出文件word.out共两行: 第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”; 第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
【样例输入1】
error
【样例输出1】
Lucky Word
2
2
【样例1解释】
单词error中出现最多的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。
【输入样例2】
oiympic
【输出样例2】
No Answer
0
2
【样例2解释】
单词oiympic中出现最多的字母i出现了2次,出现次数最少的字母出现了1次,2-1=1,1不是质数
代码
代码很简单,具体看代码
Click me to view the code
#include <cstdio>
#include <cstring>
#include <cmath>
char str[1000];
int cnt[1000]= {0};
int maxn,minn;
bool isPrime(int x){
if(x <2)
return false;
int i;
for(i=2;i<=sqrt(x)+0.5;i++){
if( x % i == 0)
return false;
}
return true;
}
int main(){
int i;
scanf("%s",str);
int len = strlen(str);
maxn = -1,minn = 9999;
int tmp;
for(i=0;i<len;i++){
tmp = ++cnt[ str[i] ];
if(tmp > maxn)
maxn = tmp;
}
for(i='a';i<='z';i++){
if( cnt[i] < minn && cnt[i] !=0)
minn = cnt[i];
}
if( isPrime( maxn - minn)){
printf("Lucky Word\n");
printf("%d", maxn - minn);
}
else{
printf("No Answer\n");
printf("%d", 0);
}
return 0;
}
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
42
43
44
统计
【问题描述】
编写一个程序,统计从键盘输入的n个单词中以“con”开头的单词个数,以及给定的某个字母出现频率。
【文件输入】
第1行为n(n<=30)
和统计的字母,以下有n行,每行一个单词。
【文件输出】
输出共两行,第一行是以“con”开头的单词个数;第二行为统计字母出现的频率(保留两位小数)
【样例输入】
3 e
continue
file
delete
2
3
4
【样例输出】
1
27.78%
2
代码
题目很简单,直接看代码
Click me to view the code
#include <cstdio>
#include <cstring>
//字符串
char con[] = "con";
int n;
char c;
char tmp[100] = {0};
int main(){
scanf("%d",&n);
scanf(" %c",&c);
int i,j;
int cnt=0,sum=0,cnt_con=0;//计数用
for(i=1;i<=n;i++){
scanf("%s",tmp);
int len = strlen(tmp); //长度
sum += len;
for(j=0;j<len;j++)
if(tmp[j] == c)
cnt++;
tmp[3] = '\0'; //指定结束
if(strcmp(tmp,con) == 0)
cnt_con++;
}
printf("%d\n",cnt_con);
printf("%0.2lf%%",cnt*1.0/sum*100);
return 0;
}
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
译码程序
【问题描述】
小明从小就喜欢编解码游戏,他现在又编写了一个译码程序,把一个英语句子全部译成了数字代码。他采用的译码规则是以数字1代替字母A,数字2代替字母B,……,26代替字母Z,如遇空格则打印一个星号‘*’,遇到逗号则打印一个‘#’。你知道他是怎么实现的吗?
【输入文件】
输入文件code.in包括一个英文句子,英文句子中只包含大写字母,‘,’和空格,句子以‘.‘结束。
【输出文件】
输出文件code.out包含的是一段译码。
【样例输入】
HI,JOHN,WELCOME BACK TO SCHOOL.
【样例输出】
89#1015814#2351231513
代码
程序很简单,具体看代码
Click me to view the code
#include <cstdio>
#include <cstring>
char str[1000];
int main(){
scanf("%s",str);
int len = strlen(str);
int i;
for(i=0;i<len-1;i++){
if( str[i] >= 'A' && str[i] <= 'Z')
printf("%d",str[i]-'A'+1);
else if( str[i] == ' ')
printf("*");
else if( str[i] == ',')
printf("#");
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
谁拿了最多奖学金(NOIP2005提高)
【问题描述】
某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:
- 1)院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;
- 2)五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
- 3)成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
- 4)西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
- 5)班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。
【文件输入】
输入的第一行是一个整数N(1<=N<=100)
,表示学生的总数。接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。
【文件输出】
输出包括三行, 第一行是获得最多奖金的学生的姓名, 第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。 第三行是这N个学生获得的奖学金的总数。
【样例输入】
4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 1
2
3
4
5
【样例输出】
ChenRuiyi
9000
28700
2
3
代码
题目很简单,具体看代码
Click me to view the code
#include <cstdio>
#include <cstring>
int n;
struct _stu {
char name[30]; //名字
int c1;//成绩1
int c2;//成绩2
char g;//干部
char x;//西部
int lun;//论文
int golden;//奖学金
}st[100];
//判断一个人的奖学金
void golden_judge(_stu &student){
student.golden = 0;//清0
if(student.c1 >80 && student.lun >=1)
student.golden += 8000;
if(student.c1 >85 && student.c2 > 80)
student.golden += 4000;
if(student.c1 >90 )
student.golden += 2000;
if(student.c1 >85 && student.x == 'Y' )
student.golden += 1000;
if(student.c1 >80 && student.g == 'Y' )
student.golden += 850;
}
int main(){
scanf("%d",&n);
int i;
int sum = 0;
int idx; // 最高学生的下标
int max = -1;
for(i=0;i<n;i++){
_stu &t = st[i];
scanf("%s %d %d %c %c %d",t.name,&t.c1,&t.c2,&t.g,&t.x,&t.lun);
golden_judge(st[i]);
sum += st[i].golden;
if(max < st[i].golden){
max = st[i].golden;
idx = i;
}
}
printf("%s\n",st[idx].name);
printf("%d\n",st[idx].golden);
printf("%d",sum);
return 0;
}
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
42
43
44
45
46
47
48
49
50
51