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; }程序截圖:
|
新聞熱點
疑難解答