5 10
源代码:
法一:可将问题情境转化为输入一个整数n,若n为奇数,输出“0 0”;否则若n是4的倍数,输出n/4 n/2的值,否则输出n/4+1 n/2的值(最小值即兔子数量最多鸡最少 最大值即鸡数量最多兔子数量最少的情况)
#include <stdio.h>int main(){ int a,n; int t=0,sum; scanf("%d",&n); while(t<n) { scanf("%d",&a); if(a%2!=0) PRintf("0 0/n"); else if(a%4==0) printf("%d %d/n",a/4,a/2); else printf("%d %d/n",a/4+1,a/2); t++; } return 0;}法二:枚举所有可能情况,将鸡兔总数存入数组,然后取最值,但是时间代价大(注意最大值<=a/2的条件,故为了提高效率,可将主函数中的双重循环处设为<=a/2,否则会超时)#include <stdio.h>#define maxn 50000void Find(int num[],int n){ int i; int max,min; max=min=num[0]; for(i=1;i<n;i++) { if(num[i]>max) max=num[i]; if(num[i]<min) min=num[i]; } printf("%d %d/n",min,max);}int main(){ int a,n; int i,j,t=0,count; int num[maxn]; scanf("%d",&n); while(t<n) { scanf("%d",&a); count=0; for(i=0;i<=a/2;i++) { for(j=0;j<=a/2;j++) { if(2*i+4*j==a) num[count++]=i+j; } } if(count==0) printf("0 0/n"); else Find(num,count); t++; } return 0;}程序截图:
2. (2003-2005年华中科技大学计算机研究生机试真题)打印日期题目描述:给出年分m和一年中的第n天,算出第n天是几月几号。输入:输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。输出:可能有多组测试数据,对于每组数据,按 yyyy-mm-dd的格式将输入中对应的日期打印出来。样例输入:2000 32000 312000 402000 602000 612001 60样例输出:2000-01-032000-01-312000-02-092000-02-292000-03-012001-03-01
源代码:
#include <stdio.h>void Find(int a[],int y,int n,int t) //第n天"查找" { int i,j; int m,d,sum=0; for(i=1;i<t;i++) { if(n<=a[i]) { j=i; break; } } m=j; d=n-a[m-1]; printf("%04d-%02d-%02d/n",y,m,d);}int main(){ int y,n; int sum1[13]={0,31,59,90,120,151,181,212,243,273,304,334,365}; //两个数组分别记录平年/闰年从1.1到第m个月月底的总天数 int sum2[13]={0,31,60,91,121,152,182,213,244,274,305,335,366}; int sum,m,d; while(scanf("%d %d",&y,&n)!=EOF) { if( (y%4==0 && y%100!=0) || (y%400==0) ) Find(sum2,y,n,13); else Find(sum1,y,n,13); } return 0;}程序截图:
3. (2008年北京大学方正实验室计算机研究生机试真题)简单密码题目描述:Julius 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组。每组数据都有如下的形式,而且各组测试数据之间没有空白的行。一组测试数据包括三部分:1. 起始行 - 一行,包括字符串 "START" 2. 密文 - 一行,给出密文,密文不为空,而且其中的字符数不超过2003. 结束行 - 一行,包括字符串 "END" 在最后一组测试数据之后有一行,包括字符串 "ENDOFINPUT"。输出:对每组数据,都有一行输出,给出密文对应的明文。样例输入: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 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 <string.h>#define maxlen 210#define flag 15void Fun(char str[],int n){ int i; for(i=0;i<n;i++) { if(str[i]>='A' && str[i]<='E') str[i]+=21; else if(str[i]>='F' && str[i]<='Z') //注意else,写成if会将处理后的A~E继续处理 str[i]-=5; }}int main(){ char start[flag],end[flag]; char str[maxlen]; int i,len; while(gets(start)!=NULL) { if(strcmp(start,"ENDOFINPUT")==0) //所有输入结束标志 break; if(strcmp(start,"START")==0) //输入开始标志,处理字符串 { gets(str); len=strlen(str); Fun(str,len); } gets(end); if(strcmp(end,"END")==0) //输入结束标志,将处理后的字符串整串输出 puts(str); } return 0;}程序截图:
※4. (2006年上海交通大学计算机研究生机试真题)2的幂次方题目描述: Every positive number can be presented by the exponential form.For example, 137 = 2^7 + 2^3 + 2^0。 Let's present a^b by the form a(b).Then 137 is presented by 2(7)+2(3)+2(0). Since 7 = 2^2 + 2 + 2^0 and 3 = 2 + 2^0 , 137 is finally presented by 2(2(2)+2 +2(0))+2(2+2(0))+2(0). Given a positive number n,your task is to present n with the exponential form which only contains the digits 0 and 2.输入: For each case, the input file contains a positive integer n (n<=20000).输出: For each case, you should output the exponential form of n an a single line.Note that,there should not be any additional white spaces in the line.样例输入:1315样例输出:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
源代码:
#include <stdio.h>#include <math.h>void solve(int n) { int cnt=0; while(pow(2,cnt)<=n) cnt++; cnt--; if(cnt==0) printf("2(0)"); else if(cnt==1) printf("2"); else { printf("2("); solve(cnt); printf(")"); } int num_r=n-pow(2,cnt); if(num_r) { printf("+"); solve(num_r); } } int main() { int n; while(scanf("%d",&n)!=EOF) { solve(n); printf("/n"); } return 0; }程序截图:
新闻热点
疑难解答