題目沒有任何輸入。
請輸出全部知足題目條件的a、b、c的值。 a、b、c之間用空格隔開。 每一個輸出佔一行。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main(){ 6 for(int i=1;i<=9;i++){ 7 for(int j=1;j<=9;j++){ 8 for(int k=0;k<=9;k++){ 9 int num1=i*100+j*10+k; 10 int num2=j*100+k*10+k; 11 int tmp=num1+num2; 12 if(tmp==532){ 13 cout<<i<<' '<<j<<' '<<k<<endl; 14 } 15 } 16 } 17 } 18 return 0; 19 }
測試數據有多組,每組輸入兩個正整數。
對於每組輸入,請輸出其最大公約數。
49 14
7
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 //歐幾里德算法 兩個整數的最大公約數等於其中較小的那個數和兩數相除餘數的最大公約數 6 int gcd(int x,int y){ 7 if( y==0) 8 return x; 9 return gcd(y,x%y); 10 } 11 12 int main(){ 13 int x,y; 14 while(scanf("%d%d",&x,&y)!=EOF){ 15 int sum=gcd(x,y); 16 cout<<sum<<endl; 17 } 18 }
輸入只有1行,即整數N。
可能有多組測試數據,對於每組數據, 輸出只有1行,即名名吃巧克力的方案數。
4
5
有點斐波那契數列的味道,emmm,
好比有5塊巧克力,
那麼,第一天,
要否則吃一塊,還剩4個,那麼就是4塊巧克力吃幾天的問題,
要否則吃兩塊,還剩3塊,那麼及時3塊巧克力吃幾天的問題,
由題目可知,有1,2,3,4,5塊巧克力能吃幾天的數量已知,而N的上限不是很大,因此可按照斐波那契數列的思想迭代出來,全部N的狀況(1<=N<=19)
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 int a[20]={0}; 5 6 int main(){ 7 int N; 8 a[1]=1,a[2]=2;a[3]=3,a[4]=5; 9 for(int i=5;i<=19;i++){ 10 a[i]=a[i-1]+a[i-2]; 11 } 12 while(scanf("%d",&N)!=EOF){ 13 int tmp=a[N]; 14 cout<<tmp<<endl; 15 } 16 return 0; 17 }
輸入一行,只包括6個小於100的正整數,其中第一個正整數就是a。
可能有多組測試數據,對於每組數據, 輸出一行,給出一個正整數,是5個數中小於a的數的和。
10 1 2 3 4 11
10
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 int main(){ 5 int tmp,num,sum=0; 6 std::cout.sync_with_stdio(false); 7 std::cin.sync_with_stdio(false); 8 for(int i=0;i<6;i++){ 9 cin>>num; 10 if(i==0){ 11 tmp=num; 12 }else if(num<tmp){ 13 sum+=num; 14 } 15 } 16 cout<<sum<<endl; 17 }
Each case contains a number n and you are expected to calculate Fn.(0<=n<=30) 。
For each case, print a number Fn on a separate line,which means the nth Fibonacci Number.
1
1
1 #include <bits/stdc++.h> 2 #include <stdio.h> 3 using namespace std; 4 int a[32]={0}; 5 int main(){ 6 a[0]=0,a[1]=1;a[2]=1; 7 for(int i=3;i<=30;i++){ 8 a[i]=a[i-1]+a[i-2]; 9 } 10 int n; 11 cin>>n; 12 cout<<a[n]<<endl; 13 return 0; 14 }
每一行包括三個數據a, b, c,而且都是正整數,均小於10000。
對於輸入的每一行,在單獨一行內輸出結果s。s=min(a,b,c)+mid(a,b,c)-max(a,b,c)。上式中,min爲最小值,mid爲中間值,max爲最大值。
1 2 3
0
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main(){ 6 int a[3]={0}; 7 int sum=0; 8 for(int i=0;i<3;i++){ 9 cin>>a[i]; 10 sum+=a[i]; 11 } 12 int mmin=a[0]; 13 int mmax=a[0]; 14 for(int i=1;i<3;i++){ 15 if(mmin>a[i]) 16 mmin=a[i]; 17 if(mmax<a[i]) 18 mmax=a[i]; 19 } 20 int mmid=sum-mmin-mmax; 21 cout<<(mmin+mmid)-mmax<<endl; 22 return 0; 23 }
每行輸入數據包括一個正整數n(0<n<40000)
對於每一個輸入數據,計算其各位數字之和,以及其平方值的數字之和,輸出在一行中,之間用一個空格分隔,但行末不要有空格。
4 12 97 39999
4 7 3 9 16 22 39 36
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main(){ 6 long n,len=0; 7 int a[20]={0}; 8 int b[20]={0}; 9 cin>>n; 10 long num=n*n; 11 while(n){ 12 len++; 13 a[len]=n%10; 14 n=(n-a[len])/10; 15 } 16 int sum1=0; 17 for(int j=1;j<=len;j++){ 18 sum1+=a[j]; 19 } 20 len=0; 21 while(num){ 22 b[len]=num%10; 23 num=(num-b[len])/10; 24 len++; 25 } 26 int sum2=0; 27 for(int j=0;j<=len;j++){ 28 sum2+=b[j]; 29 } 30 cout<<sum1<<' '<<sum2<<endl; 31 return 0; 32 }
第一行有一個整數n(1<= n <= 100),表示學生的人數。其後n行每行有1個整數,取值爲15到25。
可能有多組測試數據,對於每組數據, 輸出一行,該行包含一個浮點數,爲要求的平均年齡,保留到小數點後兩位。 要輸出浮點數、雙精度數小數點後2位數字,能夠用下面這種形式: printf("%.2f", num);
2 18 17
17.50
1 #include <bits/stdc++.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 using namespace std; 6 7 int main(){ 8 int n; 9 scanf("%d", &n); 10 int num=0; 11 float sum=0; 12 for(int i=1;i<=n;i++){ 13 scanf("%d", &num); 14 sum+=num; 15 } 16 printf("%.2f", (sum/n)); 17 return 0; 18 }
The input file will contain a list of positive integers, one per line. The integer may consist of a large number of digits.
For each integer in the input, output its digital root on a separate line of the output.
24 39
6 3
思想就是,例如24 ,2+4=6, 6大於等於10,知足
39 ,3+9=12 大於10, 而後就變成1+2=3, 3知足條件
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 8 using namespace std; 9 int a[12]={0}; 10 11 int fun(int n){ 12 int sum=0,i=0; 13 memset(a,0,sizeof(a)); 14 while(n){ 15 a[i]=n%10; 16 sum+=a[i]; 17 n=(n-a[i])/10; 18 i++; 19 } 20 return sum; 21 } 22 23 int main(){ 24 int n; 25 scanf("%d",&n); 26 int tmp=fun(n); 27 while(tmp>=10) 28 tmp=fun(tmp); 29 printf("%d\n",tmp); 30 return 0; 31 }
測試數據有多組,輸入n。
對於每組輸入,請輸出x,y,z全部可行解,按照x,y,z依次增大的順序輸出。
40
x=0,y=0,z=100 x=0,y=1,z=99 x=0,y=2,z=98 x=1,y=0,z=99
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #define maxn 100 8 using namespace std; 9 10 int main(){ 11 int n; 12 scanf("%d",&n); 13 for(int x=0;x<=n/5;x++){ 14 for(int y=0;y<=(n-5*x)/3;y++){ 15 for(int z=0;z<=(n-5*x-3*y)*3;z++){ 16 if(x+y+z==100){ 17 printf("x=%d,y=%d,z=%d\n",x,y,z); 18 } 19 } 20 } 21 } 22 return 0; 23 }
一個字符串,其長度n<=20
輸入樣例可能有多組,對於每組測試樣例, 按照ASCII碼的大小對輸入的字符串從小到大進行排序,輸出排序後的結果
dcba
abcd
小析:理解字符和ASCII碼的輸出
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #include <iostream> 8 #define maxn 22 9 using namespace std; 10 11 int a[maxn]={0}; 12 char str[22]; 13 int main(){ 14 scanf("%s",&str); 15 for(int i=0;i<=20;i++){ 16 a[i]=str[i]; 17 } 18 sort(a,a+20); 19 for(int i=0;i<=20;i++){ 20 if(a[i]) 21 printf("%c",a[i]); 22 } 23 return 0; 24 }
測試包含多個用例,每一個用例包含一個整數n,當n爲0 時表示輸入結束。(1<=n<=10000)
對於每組測試用例請輸出一個數,表示須要通過的步數,每組輸出佔一行。
3 1 0
5 0
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #include <iostream> 8 #define maxn 22 9 using namespace std; 10 11 int a[maxn]={0}; 12 char str[22]; 13 int main(){ 14 int n=0; 15 while(scanf("%d",&n)!=EOF){ 16 int sum=0; 17 if(n==0){ 18 printf("0\n"); 19 return 0; 20 } 21 while(n!=1){ 22 if(n%2==0){ 23 n=n/2; 24 sum++; 25 }else{ 26 n=n*3+1; 27 n=n/2; 28 sum++; 29 } 30 } 31 printf("%d\n",sum); 32 } 33 return 0; 34 }
測試數據有多組,輸入字符串。
對於每組輸入,輸出處理後的結果。
bacd
abcd
小析:和上面那題基本上沒什麼區別
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #include <iostream> 8 #define maxn 220 9 using namespace std; 10 11 int a[maxn]={0}; 12 char str[220]; 13 int main(){ 14 scanf("%s",&str); 15 for(int i=0;i<=200;i++){ 16 a[i]=str[i]; 17 } 18 sort(a,a+200); 19 for(int i=0;i<=200;i++){ 20 if(a[i]) 21 printf("%c",a[i]); 22 } 23 return 0; 24 }
輸入的第一行是正整數n (1 <= n <= 20),表示不一樣的物品的數目。接下來的n行,每行有一個1到40之間的正整數,分別給出a1,a2……an的值。
輸出不一樣的選擇物品的方式的數目。
3 20 20 20
3
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #include <iostream> 8 #define maxn 50 9 using namespace std; 10 11 int a[maxn]={0}; 12 int dp[100][43]; //數組大小 13 14 int main(){ 15 int n=0; 16 scanf("%d",&n); 17 for(int i=1;i<=n;i++){ 18 scanf("%d",&a[i]); 19 dp[i][0]=1; 20 } 21 dp[0][0]=1; 22 for(int i=1;i<=n;i++){ 23 for(int j=1;j<=40;j++){ 24 dp[i][j]=dp[i-1][j]; 25 if(j>=a[i]) 26 dp[i][j]+=dp[i-1][j-a[i]]; 27 //cout<<dp[i][j]<<" "; 28 } 29 // cout<<endl; 30 } 31 cout<<dp[n][40]<<endl; 32 return 0; 33 }
測試輸入包含若干測試用例,每一個測試用例的格式爲 第1行:N 第2行:N名學生的成績,相鄰兩數字用一個空格間隔。 第3行:給定分數 當讀到N=0時輸入結束。其中N不超過1000,成績分數爲(包含)0到100之間的一個整數。
對每一個測試用例,將得到給定分數的學生人數輸出。
3 80 60 90 60 2 85 66 0 5 60 75 90 55 75 75 0
1 0 2
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #include <iostream> 8 #define maxn 110 9 using namespace std; 10 11 int a[maxn]={0}; 12 13 int main(){ 14 int n=0; 15 while(scanf("%d",&n)!=EOF){ 16 if(n==0) return 0; 17 int tmp; 18 for(int i=0;i<n;i++){ 19 scanf("%d",&tmp); 20 a[tmp]++; 21 } 22 int key=0; 23 scanf("%d",&key); 24 printf("%d\n",a[key]); 25 } 26 return 0; 27 }
測試數據有多組,每組輸入一個字符串。
對於每組輸入,請輸出逆置後的結果。
hdssg
gssdh
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #include <iostream> 8 #define maxn 210 9 using namespace std; 10 11 char a[maxn]={'0'}; 12 13 int main(){ 14 scanf("%s",&a); 15 int len=strlen(a); 16 for(int i=len-1;i>=0;i--){ 17 printf("%c",a[i]); 18 } 19 20 return 0; 21 }
輸入包含一行或多行,每行包含一個整數n。若是 n = 0 表示輸入結束,不然n是一個skew數
可能有多組測試數據,對於每個輸入, 輸出它的十進制表示。轉換成十進制後, n 不超過 231-1 = 2147483647
10120 200000000000000000000000000000 10 1000000000000000000000000000000 11 100 11111000001110000101101102000 0
44 2147483646 3 2147483647 4 7 1041110737
,快速冪,而後按着給定的公式來,數字比較大,以字符形式接收,如a[1]='1',a[1]-'0'=1, 把字符1轉換爲了數字1,
快速冪思想就是把冪二進制化,而後運用&運算取得最後一位二進制位,<<運算,將二進制數右移一位,
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #include <iostream> 8 #define maxn 50 9 using namespace std; 10 11 char a[maxn]={'0'}; 12 long long pow(int a,int b){ 13 long long sum=1; 14 while(b){ 15 if(b&1) 16 sum=sum*a; 17 a*=a; 18 b>>=1; 19 } 20 return sum; 21 } 22 23 int main(){ 24 scanf("%s",&a); 25 int len=strlen(a); 26 int k=len; 27 long long sum=0,tmp=0; 28 for(int i=0;i<len;i++){ 29 tmp=(a[i]-'0')*(pow(2,k)-1); 30 sum+=tmp; 31 k--; 32 } 33 cout<<sum<<endl; 34 return 0; 35 }
每行均包含二個整數M和N,以空格分開。1<=M,N<=10。
對輸入的每組數據M和N,用一行輸出相應的K。
8
蘋果和盤子的故事
對於兩個均可變化數量的物體,要固定其中一個纔好分析
這裏選擇固定盤子(由於蘋果能夠不限制數目的放在盤子裏) m個蘋果,n個盤子,用遞歸的方法能夠解決
遞歸體
當m>=n時,蘋果數量多,盤子數量少,那麼
當空出一個盤子後(由於是遞歸,因此這裏的「一」不是真正的一,n-1,n-2,n-3...)
fun(m,n)=fun(m,n-1)
不留空盤子,那麼,此時花費(m-n)個蘋果,
fun(m,n)=fun(m-n,n);
當m<n時,蘋果數量少,空盤子對結果無增益,因此本題可忽略,那麼就轉化爲在m個盤子裏放置m個蘋果的故事,
fun(m,n)=fun(m,m)
總計爲:fun(m,n)=fun(m,n-1)+fun(m-n,n)
結束條件
當m==0,時,咱們結束遞歸,return 1;
當n==1,時,只剩下一個盤子啦,就只有一種狀況,return 1;
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #include <iostream> 8 #define maxn 50 9 using namespace std; 10 11 char a[maxn]={'0'}; 12 int fun(int m,int n){ 13 if(m==0||n==1) return 1; 14 if(m<n) 15 return fun(m,m); 16 else 17 return fun(m,n-1)+fun(m-n,n); 18 } 19 20 int main(){ 21 int m,n; 22 scanf("%d%d",&m,&n); 23 int ans=fun(m,n); 24 printf("%d\n",ans); 25 return 0; 26 }
For each case, the first line of the input file contains one integer n-length of the sequence (0 < n ≤ 10 000). The second line contains n integers numbers-a1, a2, …, an (-1 000 000 000 000 000 ≤ ai ≤ 1 000 000 000 000 000).
For each case, on the first line of the output file print the sequence in the reverse order.
5 -3 4 6 -8 9
9 -8 6 4 -3
數組的翻轉
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #include <iostream> 8 #define maxn 10010 9 using namespace std; 10 11 long long a[maxn]; 12 13 int main(){ 14 int n; 15 scanf("%d",&n); 16 for(int i=0;i<n;i++){ 17 scanf("%d",&a[i]); 18 } 19 for(int i=n-1;i>=0;i--){ 20 printf("%d ",a[i]); 21 } 22 return 0; 23 }
輸入包含多行,每行一個字符串。
對每一個字符串,輸出它全部出現次數在1次以上的子串和這個子串出現的次數,輸出按字典序排序。
10101
0 2 01 2 1 3 10 2 101 2
從左到右找出每一種組合,用map這種的鍵值對,來對每一種狀況進行計數
1 #include <stdio.h> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <math.h> 7 #include <iostream> 8 #include <map> 9 #define maxn 10010 10 11 using namespace std; 12 13 map<string,int> m; 14 15 int main(){ 16 string str; 17 cin>>str; 18 int len=str.length(); 19 if(len==1) 20 return 0; 21 for(int i=0;i<len;i++){ 22 for(int j=1;j<=len-i;j++){ 23 string tmp=str.substr(i,j); 24 //cout<<tmp<<endl; 25 m[tmp]++; 26 } 27 //cout<<"********************"<<endl; 28 } 29 map<string,int>::iterator it; 30 it=m.begin(); 31 while(it!=m.end()){ 32 if(it->second>1){ 33 cout<<it->first<<" "<<it->second<<endl; 34 } 35 it++; 36 } 37 38 return 0; 39 }