信息学竞赛OJ代码_第1页
信息学竞赛OJ代码_第2页
信息学竞赛OJ代码_第3页
信息学竞赛OJ代码_第4页
信息学竞赛OJ代码_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、101:鸡兔同笼描述一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物输入第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,每行一个正整数a (a < 32768)输出输出包含n行,每行对应一个输入,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开如果没有满足要求的答案,则输出两个0。样例输入2320样例输出0 05 10代码#include<stdlib.h>#include<stdio.h>int main() int m;

2、int n; int min,max; scanf("%d",&m); for(int i=0;i<m;i+) scanf("%d",&n); if(n%2!=0) printf("0 0n"); else min=n/4+(n%4)/2; max=n/2; printf("%d %dn",min,max); /system("pause");104:distance on chessboard描述国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间。如下图所示:王

3、、后、车、象的走子规则如下:· 王:横、直、斜都可以走,但每步限走一格。· 后:横、直、斜都可以走,每步格数不受限制。车:横、竖均可以走,不能斜走,格数不限。 象:只能斜走,格数不限。写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。输入第一行是测试数据的组数t(0 <= t <= 20)。以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置。位置用"字母-数字"的形式表示,字母从"a"到"h",数字从"1"到

4、"8"。输出对输入的每组测试数据,输出王、后、车、象所需的最少步数。如果无法到达,就输出"inf".样例输入2a1 c3f5 f8样例输出2 1 2 13 1 1 inf代码#include <stdio.h>#include <math.h>#include <stdlib.h>int main() int ncases, i; scanf("%d", & ncases); for(i = 0; i < ncases; i+) char begin5, end5; scanf(&qu

5、ot;%s %s",begin,end); int x,y; x = abs (begin0 - end0); y = abs (begin1 - end1); if(x = 0 && y = 0) printf("0 0 0 0n"); else if(x < y) printf("%d", y); else printf("%d", x); if(x = y | x = 0 | y = 0) printf(" 1"); else printf(" 2"); i

6、f(x = 0 | y = 0)printf(" 1"); else printf(" 2"); if(abs(x - y) % 2 !=0)printf(" infn"); else if(x = y) printf(" 1n"); else printf(" 2n"); return 0;105:校门外的树描述 某校大门外长度为l的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在l的位置;数轴上的每个整数点,即0,1,2,l,都

7、种有一棵树。马路上有一些区域要用来建地铁,这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。输入输入的第一行有两个整数l(1 <= l <= 10000)和 m(1 <= m <= 100),l代表马路的长度,m代表区域的数目,l和m之间用一个空格隔开。接下来的m行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。输出输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目

8、。样例输入500 3150 300100 200470 471样例输出298代码#include<stdio.h>int main() int l,m;int i; int x,y; int count=0; int a10001; scanf("%d %d",&l,&m); for(i=0;i<=l;i+) ai=1; for(i=0;i<m;i+) scanf("%d %d",&x,&y); for(int j=x;j<=y;j+) if(aj=1) aj=0; for(i=0;i<

9、=l;i+) if(ai=1) count+; printf("%dn",count); return 0; 106:放苹果描述把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用k表示)5,1,1和1,5,1 是同一种分法。输入第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数m和n,以空格分开。1<=m,n<=10。输出对输入的每组数据m和n,用一行输出相应的k。样例输入17 3样例输出8代码#include<stdio.h>#include<stdlib.h>

10、int apple(int m,int n);int main() int k; int m,n; scanf("%d",&k); while(k-) scanf("%d %d",&m,&n); printf("%dn",apple(m,n); int apple(int m,int n) if(m=0|n=1) return 1; if(n>m) return apple(m,m); else return apple(m,n-1)+apple(m-n,n);107:迷宫描述一天extense在森林里探

11、险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,extense想要从点a走到点b,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。输入第1行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n (1 <= n <= 100),表示迷宫的规模是n * n的。接下来是一个n * n的矩阵,矩阵中的元素为.或者#。再接下来一行是4个整数ha, l

12、a, hb, lb,描述a处在第ha行, 第la列,b处在第hb行, 第lb列。注意到ha, la, hb, lb全部是从0开始计数的。输出k行,每行输出对应一个输入。能办到则输出“yes”,否则输出“no”。样例输入23.#.#.0 0 2 25.#.#.#.#.#.0 0 4 0样例输出yesno代码#include<stdio.h>#include<string.h>#include<stdlib.h>char migong110110;int la,lb,ha,hb;int n;int k;int f(int a,int b) if(a=la&

13、;&b=lb) return 1; if(a<0|a>=n|b<0|b>=n) return 0; if(migongab='#') return 0; if(migongab='.') migongab='#' return f(a-1,b)|f(a+1,b)|f(a,b-1)|f(a,b+1); int main() int i,j; scanf("%d",&k); while(k-) scanf("%d",&n); getchar(); for(i=0;

14、i<n;i+) scanf("%s",migongi); scanf("%d %d %d %d",&ha,&hb,&la,&lb); int b=f(ha,hb); if(migonglalb='#') printf("non"); else if(b=1) printf("yesn"); if(b=0) printf("non"); 301:统计字符数描述判断一个由a-z这26个字符组成的字符串中哪个字符出现的次数最多输入第1行是测试数据的

15、组数n,每组测试数据占1行,是一个由a-z这26个字符组成的字符串每组测试数据之间有一个空行,每行数据不超过1000个字符且非空输出n行,每行输出对应一个输入。一行输出包括出现次数最多的字符和该字符出现的次数,中间是一个空格。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符样例输入2abbcccadfadffasdf样例输出c 3f 4代码#include<stdio.h>#include<string.h>int main()int a26;int c26;int n,i,j,k,len,t,m;char str1000;scanf("

16、;%d",&n);for(i=0;i<n;i+)int a26=0,c26=0;scanf("%s",str);len=strlen(str);for(j=0;j<len;j+)a(int)(strj-'a')+;for(m=0;m<26;m+)cm=am;for(j=0;j<25;j+)for(k=0;k<25-j;k+)if(ak<=ak+1)t=ak;ak=ak+1;ak+1=t;for(j=0;j<26;j+)if(a0=cj)printf("%c %d",j+97,a0

17、);printf("n");break;return 0;302:487-3279描述企业喜欢用容易被记住的电话号码。让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语。例如,你需要给滑铁卢大学打电话时,可以拨打tut-glop。有时,只将电话号码中部分数字拼写成单词。当你晚上回到酒店,可以通过拨打310-gino来向gino's订一份pizza。让电话号码容易被记住的另一个办法是以一种好记的方式对号码的数字进行分组。通过拨打必胜客的“三个十”号码3-10-10-10,你可以从他们那里订pizza。电话号码的标准格式是七位十进制数,并在第三、第四位数

18、字之间有一个连接符。电话拨号盘提供了从字母到数字的映射,映射关系如下:a, b, 和c 映射到 2 d, e, 和f 映射到 3 g, h, 和i 映射到 4 j, k, 和l 映射到 5 m, n, 和o 映射到 6 p, r, 和s 映射到 7 t, u, 和v 映射到 8 w, x, 和y 映射到 9 q和z没有映射到任何数字,连字符不需要拨号,可以任意添加和删除。 tut-glop的标准格式是888-4567,310-gino的标准格式是310-4466,3-10-10-10的标准格式是310-1010。 如果两个号码有相同的标准格式,那么他们就是等同的(相同的拨号) 你的公司正在为本

19、地的公司编写一个电话号码薄。作为质量控制的一部分,你想要检查是否有两个和多个公司拥有相同的电话号码。输入输入的格式是,第一行是一个正整数,指定电话号码薄中号码的数量(最多100000)。余下的每行是一个电话号码。每个电话号码由数字,大写字母(除了q和z)以及连接符组成。每个电话号码中只会刚好有7个数字或者字母。输出对于每个出现重复的号码产生一行输出,输出是号码的标准格式紧跟一个空格然后是它的重复次数。如果存在多个重复的号码,则按照号码的字典升序输出。如果输入数据中没有重复的号码,输出一行: no duplicates.样例输入124873279its-easy888-45673-10-10-1

20、0888-gloptut-glop967-11-11310-ginof101010888-1200-4-8-7-3-2-7-9-487-3279样例输出310-1010 2487-3279 4888-4567 3代码#include<stdio.h>#include<string.h>#include<stdlib.h>char map="22233344455566677778889999"char str80,telnumbers1000009;int compare(const void

21、60;* elem1,const void *elem2)return(strcmp(char *)elem1,(char *)elem2);void standardizetel(int n)int j,k;j=k=-1;while(k<8)j+;if(strj='-')continue;k+;if(k=3)  telnumbersnk='-'k+;if(strj>='a' && strj<=

22、'z') telnumbersnk=mapstrj-'a'continue;telnumbersnk=strj;telnumbersnk='0'return;int main()int n,i,j;bool noduplicate;scanf("%d",&n);for(i=0;i<n;i+)scanf("%s",str);standardizetel(i); qsort(telnumbers,n,9,compare);noduplicate=t

23、rue;i=0;while(i<n) j=i;i+;while(i<n && strcmp(telnumbersi,telnumbersj)=0)  i+;if(i-j>1)printf("%s %dn",telnumbersj,i-j);noduplicate=false;if(noduplicate)printf("no duplicates.n");return 0;303:子串描述现在有一些由英文字符组成的大小写敏感的字符串,你的任务

24、是找到一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是y的子串,或者x中的字符反序之后得到的新字符串是y的子串。输入输入的第一行是一个整数t (1 <= t <= 10),t表示测试数据的数目。对于每一组测试数据,第一行是一个整数n (1 <= n <= 100),表示已经给出n个字符串。接下来n行,每行给出一个长度在1和100之间的字符串。输出对于每一组测试数据,输出一行,给出题目中要求的字符串x的长度。样例输入23abcdbcdffbrcd2roseorchid样例输出22代码304:caesar 密码描述julius caesar 生活在充满危

25、险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是caesar 军团中的一名军官,需要把caesar 发送的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母a都分别替换成字母f),其他字符不 变,并且消息原文的所有字母都是大写的。 密码字母:a b c d e f g h i j k l m n o p q r s t u v w x y z原文字母:v w x y z a b c d e f g h i j k l m n o p q r s t u输入最多不超过100个数据集组成。每

26、个数据集由3部分组成:起始行:start 密码消息:由1到200个字符组成一行,表示caesar发出的一条消息结束行:end 在最后一个数据集之后,是另一行:endofinput输出每个数据集对应一行,是caesar 的原始消息。样例输入startns bfw, jajsyx tk nrutwyfshj fwj ymj wjxzqy tk ywnanfq hfzxjxendstartn btzqi wfymjw gj knwxy ns f qnyyqj ngjwnfs anqqflj ymfs xjhtsi ns wtrjendstartifsljw pstbx kzqq bjqq ymfy

27、hfjxfw nx rtwj ifsljwtzx ymfs mjendendofinput样例输出in war, events of importance are the result of trivial causesi would rather be first in a little iberian village than second in romedanger knows full well that caesar is more dangerous than he代码#include<stdio.h>#include<stdlib.h>#include&l

28、t;string.h>char mima210;char str110;char str210;int main() a='a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t&#

29、39;,'u','v','w','x','y','z' b='v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n

30、','o','p','q','r','s','t','u' char a="abcdefghijklmnopqrstuvwxyz" char b="vwxyzabcdefghijklmnopqrstu" while(scanf("%s",str1) char mingwen210="" getchar(); if(strcmp(str1,"endofinput")=0) bre

31、ak; if(strcmp(str1,"start")!=0) continue; gets(mima); int len=strlen(mima); for(int i=0;i<len;i+) if(mimai>='f'&&mimai<='z') mingweni=mimai-5; else if(mimai>='a'&&mimai<='e') mingweni=mimai+21; else mingweni=mimai; scanf("

32、%s",str2); getchar(); printf("%sn",mingwen); 306:all in all问题描述:给定两个字符串s和t,判断s是否是t的子序列。即从t中删除一些字符,将剩余的字符连接起来,即可获得s。输入:输入文件包括多组测试数据,每组测试数据占一行,包括两个由ascii码组成的字符串s和t,它们的长度都不超过100000。输出:对于每个测试数据输出一行,如果s是t的子序列,则输出“yes”,否则输出“no”。样例输入:sequence subsequenceperson compressionverdi vivavittorioem

33、anuelerediitaliacasedoesmatter casedoesmatter样例输出:yesnoyesno代码#include<stdio.h>#include<stdlib.h>#include<string.h> int main() int i,j;int len1,len2; char str1100010; char str2100010; while(scanf("%s %s",str1,str2)!=eof) int k=-1;int b=0; len1=strlen(str1); len2=strlen(st

34、r2); for(int i=0;i<len1;i+) for(int j=k+1;j<len2;j+) if(str1i=str2j) k=j; b+; break; if(b=len1) printf("yesn"); else printf("non"); 307:wertyu问题描述:一种常见的打字键入错误是将键盘上的键位错按成它右侧相邻的按键,如图3.1所示图3.1 键盘比如,想键入“q”却误按成“w”,想键入“j”却被误按成“k”,要求编程对上述错误的打字方式进行更正。输入:输入文件包含若干行,每行可以包含数字、空格和除“a”、“

35、z”、“q”外的大写字母,还有除单引号“”外的标点符号。并且也不会错按到tab、backspace、control等标记了单词的按键。输出:将每个字母或标点符号用它左边的符号替换,输入中的空格按原样输出(即空格不会键入错误)。样例输入:o s,gomr ypfsu/234567890-=wertyyuiop样例输出:i am fine today.1234567890-qwertyuiop代码#include<stdlib.h>#include<stdio.h>#include<string.h>char str100;char key410='1&

36、#39;,'2','3','4','5','6','7','8','9','0','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h&

37、#39;,'j','k','l','','z','x','c','v','b','n','m',',','.','/'int main() while(gets(str) char str1100="" int i; int len=strlen(str); for(i=0;i<len;i+) if(stri='-')str1i=&

38、#39;0' if(stri='=')str1i='-' if(stri='')str1i='p' if(stri='')str1i='' if(stri='')str1i='' if(stri=''')str1i='' if(stri=' ')str1i=' ' if(stri='1')str1i='' else for(int j=0;j<4;j+

39、) for(int k=1;k<10;k+) if(stri=keyjk) str1i=keyjk-1; for(i=0;i<len;i+) printf("%c",str1i); printf("n"); 501:约瑟夫问题描述约瑟夫问题:有只猴子,按顺时针方向围成一圈选大王(编号从到),从第号开始报数,一直数到,数到的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入,后,输出最后猴王的编号。输入每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m,n &l

40、t;=300)。最后一行是:0 0输出对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号样例输入6 212 48 30 0样例输出517代码#include<stdio.h>int main()int a301;int i,n,m,count,j;while(scanf("%d %d",&n,&m)&&n!=0&&m!=0)for(i=0;i<n;i+)ai=i+1; j=0;for(i=0;i<n;i+)count=0;while(count<m)while(aj=0)j=(j

41、+1)%n;count+;j=(j+1)%n;j-;if(j<0)j=n-1;if(i=n-1)printf("%dn",aj);aj=0;return 0;getchar();502:摘花生鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!熊字”。鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。有经验的多多一眼就能看出,每棵花生植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株

42、,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。”我们假定多多在每个单位时间内,可以做下列四件事情中的一件:1) 从路边跳到最靠近路边(即第一行)的某棵花生植株;2) 从一棵植株跳到前后左右与之相邻的另一棵植株;3) 采摘一棵植株下的花生;4) 从最靠近路边(即第一行)的某棵花生植株跳回路边。现在给定一块花生田的大小和花生的分布,请问在限定时间内,多多最多可以采到多少个花生?注意可能只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。例如在图2所示的花生田里,只有位于(2, 5), (3, 7), (4, 2), (5

43、, 4)的植株下长有花生,个数分别为13, 7, 15, 9。沿着图示的路线,多多在21个单位时间内,最多可以采到37个花生。输入输入的第一行包括一个整数t,表示数据组数每组输入的第一行包括三个整数,m, n和k,用空格隔开;表示花生田的大小为m * n(1 <= m, n <= 50),多多采花生的限定时间为k(0 <= k <= 1000)个单位时间。接下来的m行,每行包括n个非负整数,也用空格隔开;第i + 1行的第j个整数pij(0 <= pij <= 500)表示花生田里植株(i, j)下花生的数目,0表示该植株下没有花生。输出输出包括t行,每一行

44、只包含一个整数,即在限定时间内,多多最多可以采到花生的个数。样例输入6 7 210 0 0 0 0 0 00 0 0 0 13 0 00 0 0 0 0 0 70 15 0 0 0 0 00 0 0 9 0 0 00 0 0 0 0 0 0样例输出37代码#include<stdio.h>#include<math.h>int main()int hf5555;int n,n,k,m,k,max,total,time=0;int i,j,maxi,maxj,nowi,nowj;scanf("%d",&n); for( k=0;k<n;k

45、+) total=0;time=0;scanf("%d %d %d",&n,&m,&k);for(i=1;i<=n;i+)for(j=1;j<=m;j+)scanf("%d",&hfij); nowi=0;nowj=0;while(time<k) max=0; for(i=1;i<=n;i+) for(j=1;j<=m;j+) if(hfij>max) max=hfij; maxi=i;maxj=j; if(max=0) break; if(nowi=0) nowj=maxj; if(t

46、ime+1+maxi+fabs(nowi-maxi)+fabs(maxj-nowj)<=k) time+=fabs(nowi-maxi)+fabs(maxj-nowj)+1; nowi=maxi; nowj=maxj; total+=hfmaximaxj; hfmaximaxj=0; else break;printf("%dn",total);return 0;503:the drunk jailer问题描述:某个监狱有一排、共n间牢房,一间挨一间。每间牢房关着一名囚犯,每间牢房的门刚开始时都是关着的。有一天晚上,狱卒厌烦了看守工作,决定玩一个游戏。游戏的第1轮,他

47、喝了一杯酒,然后沿着监狱,把所有的牢房的门挨个挨个打开;第2轮,他又喝了一杯酒,然后沿着监狱,把编号为偶数的牢房的门关上;第3轮,他又喝了一杯酒,然后沿着监狱,对编号为3的倍数的牢房,如果牢房的门开着,则关上,否则打开;,狱卒重复游戏n轮。游戏结束后,他喝下最后一杯酒,醉倒了。这时,囚犯才意识到他们牢房的门可能是开着的,而且狱卒醉倒了,所以他们越狱了。给定牢房的数目,求越狱囚犯的人数。输入:输入文件的第1行为一个正整数,表示测试数据的个数。每个测试数据占一行,为一个整数n,5<=n<=100,表示牢房的数目。输出:对每个测试数据所表示的牢房数目n,输出越狱的囚犯人数。样例输入:25

48、100样例输出:210代码#include<stdio.h>#include<stdlib.h>int a200;int main() int n; scanf("%d",&n); while(n-) int m; int i; int count=0; int j,k; /int a200=0; scanf("%d",&m); for(i=1;i<=m;i+) ai=0;/表示监狱中的每个房间是关着的 for(i=1;i<=m;i+)/进行m次游戏 for(j=i;j<=m;j+=i) if(a

49、j=0) aj=1; else aj=0; for(i=1;i<=m;i+) if(ai=1) count+; printf("%dn",count); return 0;504:排列题目描述:大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列。任务描述:给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列1 2 3n。比如:n = 3,k=2 给出排列2 3 1,则它的下1个排列

50、为3 1 2,下2个排列为3 2 1,因此答案为3 2 1。输入第一行是一个正整数m,表示测试数据的个数,下面是m组测试数据,每组测试数据第一行是2个正整数n( 1 <= n < 1024 )和k(1<=k<=64),第二行有n个正整数,是1,2 n的一个排列。输出对于每组输入数据,输出一行,n个数,中间用空格隔开,表示输入排列的下k个排列。样例输入33 12 3 13 13 2 110 21 2 3 4 5 6 7 8 9 10样例输出3 1 21 2 31 2 3 4 5 6 7 9 8 10代码#include <stdio.h>#include &l

51、t;algorithm>using namespace std;int k,t,i,j,p,n,a1100;int main() scanf("%d",&t); for(i=0;i<t;i+) scanf("%d %d",&n,&k); for(j=0;j<n;j+) scanf("%d",&aj); for(j=0;j<k;j+) if(next_permutation(a,a+n)=0) for(p=0;p<n;p+) ap=p+1; for(j=0;j<n;j+

52、) printf("%d ",aj); printf("n"); return 0;505:candy sharing game问题描述:n个学生围成一圈坐着,面向老师(老师位于中心)。每个学生手头上刚开始都有偶数块糖果。每轮游戏:老师一吹哨子,每个学生将他的糖果的一半分给他右边相邻的学生;n个学生分糖果完毕后,如果某个学生手头上的糖果数为奇数,则由老师再给一块糖果凑成偶数块。当所有学生的糖果数一样时,则游戏结束。要求编写程序,输出游戏进行的轮数,以及最终每个学生手头糖果的块数。输入:输入文件描述了多次游戏(即输入文件中包含多个测试数据)。每次游戏的数据

53、第一行是一个整数n,表示学生的人数,接下来是n个偶数,代表初始时n个学生手上的糖果数目(逆时针排列)。输入文件最后一行为0,表示输入结束。输出:对每次游戏,输出游戏进行的轮数,以及游戏结束后每个学生手上的糖果数。样例输入:(每个数字输入后敲一下enter键,换行)6、36、2、2、2、2、2、11、22、20、18、16、14、12、10、8、6、4、2、4、2、4、6、8、0样例输出:15 1417 224 8代码#include<stdio.h>#include<string.h>int main()int game(int a,int m);int a10000,

54、b10000;int i,n,t=1;while(scanf("%d",&n)&&n!=0) int j=0;t=0;for(i=0;i<n;i+)scanf("%d",&ai);while(t=0)for(i=0;i<n;i+)bi=ai;for(i=0;i<n;i+)ai+1=bi/2+ai+1/2;a0=b0/2+bn-1/2;t=game(a,n);if(t=1)break;elsefor(i=0;i<n;i+)if(ai%2!=0)ai=ai+1;j+;for(i=0;i<n;i+)

55、if(ai%2!=0)ai=ai+1;if(j=0)printf("%d %dn",j+1,a0);elseprintf("%d %dn",j,a0);getchar();return 0;int game(int a,int m)int i,t;for(i=0;i<m;i+)if(a0!=ai)t=0;break;elset=1;return (t);506:数根描述数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数

56、为止。比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数根。输入输入包括一些正整数(小于101000),每个一行。输入的最后一行是0,表示输入的结束,这一行不用处理。输出对每个正整数,输出它的数根。每个结果占据一行。样例输入24390样例输出63代码#include<stdlib.h>#include<string.h>#include<stdio.h>char str2000;int main() while(ge

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论