标签:text cond asc 数组 algo task 苹果 复试 char
题目没有任何输入。
请输出所有满足题目条件的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 }
标签:text cond asc 数组 algo task 苹果 复试 char
原文地址:https://www.cnblogs.com/z-712/p/10465559.html