C++重复结构题解
买房子
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之K增长,并且该程序员未来年薪不变,且不吃不喝,不用交税,每年所得N万全都积攒起来,问第几年能够买下这套房子?(第一年年薪N万,房价200万)
- 输入
- 一行,包含两个正整数N(10 <= N <= 50), K(1 <= K <= 20),中间用单个空格隔开。
- 输出
- 如果在第20年或者之前就能买下这套房子,则输出一个整数M,表示最早需要在第M年能买下,否则输出Impossible。
- 样例输入
-
50 10
- 样例输出
-
8
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int main() 5 { 6 int n,k,i,t; 7 cin>>n>>k; 8 t=n; 9 double p=200; 10 for( i=1;i<=20;i++) 11 { 12 13 if(n>p) 14 { 15 cout<<i; 16 break; 17 } 18 p=p*(1+k*1.0/100); 19 n+=t; 20 21 } 22 if(i>20) 23 { 24 cout<<"Impossible"; 25 } 26 return 0; 27 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
鸡尾酒疗法,原指“高效抗逆转录病毒治疗”(HAART),由美籍华裔科学家何大一于1996年提出,是通过三种或三种以上的抗病毒药物联合使用来治疗艾 滋病。该疗法的应用可以减少单一用药产生的抗药性,最大限度地抑制病毒的复制,使被破坏的机体免疫功能部分甚至全部恢复,从而延缓病程进展,延长患者生 命,提高生活质量。人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式 进行。假设鸡尾酒疗法的有效率为x,新疗法的有效率为y,如果y-x大于5%,则效果更好,如果x-y大于5%,则效果更差,否则称为效果差不多。下面给 出n组临床对照实验,其中第一组采用鸡尾酒疗法,其他n-1组为各种不同的改进疗法。请写程序判定各种改进疗法效果如何。
- 输入
- 第一行为整数n( 1 < n <= 20);
其余n行每行两个整数,第一个整数是临床实验的总病例数(小于等于10000),第二个疗效有效的病例数。
这n行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法的数据。 - 输出
- 有n-1行输出,分别表示对应改进疗法的效果:
如果效果更好,输出better;如果效果更差,输出worse;否则输出same - 样例输入
-
5 125 99 112 89 145 99 99 97 123 98
- 样例输出
-
same worse better same
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int main() 5 { 6 7 int n,x,y; 8 cin>>n; 9 cin>>x>>y; 10 double b[n-1]; 11 double a=y*1.0/x; 12 for(int i=0;i<n-1;++i) 13 { 14 cin>>x>>y; 15 b[i]=y*1.0/x; 16 17 } 18 for(int i=0;i<n-1;++i) 19 { 20 if(b[i]-a>0.05) 21 { 22 cout<<"better"<<endl; 23 continue; 24 } 25 if(a-b[i]>0.05) 26 { 27 cout<<"worse"<<endl; 28 continue; 29 } 30 31 cout<<"same"<<endl; 32 } 33 return 0; 34 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
救生船从大本营出发,营救若干屋顶上的人回到大本营,屋顶数目以及每个屋顶的坐标
和人数都将由输入决定,求出所有人都到达大本营并登陆所用的时间。
在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表 示。救生船每次从大本营出发,以速度50 米/分钟驶向下一个屋顶,达到一个屋顶后,救下其上的所有人,每人上船1 分钟,船原路返回,达到大本营,每人下船0.5 分钟。假设原点与任意一个屋顶的连线不穿过其它屋顶。 - 输入
- 第一行,一个整数,表示屋顶数n。
接下来依次有n 行输入,每一行上包含两个表示屋顶相对于大本营的平面坐标位置的实数(单位是米)、一个表示人数的整数,数之间以一个空格分
开。 - 输出
- 一行,救援需要的总时间,精确到分钟 (向上取整)。
- 样例输入
-
1 30 40 3
- 样例输出
-
7
1 #include <iostream> 2 #include<cmath> 3 using namespace std; 4 int main() 5 { 6 int n,p; 7 double x, y,sum=0; 8 cin >> n; 9 double d,a; 10 for (int i=0;i<n;++i) 11 { 12 cin >> x >> y >> p; 13 d = sqrt(x*x + y * y); 14 a = d*2 / 50.0+p*(1+0.5); 15 sum += a; 16 } 17 cout << ceil(sum); 18 return 0; 19 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。
编程计算气球在第10次落地时,共经过多少米? 第10次反弹多高? - 输入
- 输入一个整数h,表示球的初始高度。
- 输出
- 输出包含两行:
第1行:到球第10次落地时,一共经过的米数。
第2行:第10次弹跳的高度。
注意:结果可能是实数,结果用double类型保存。
提示:输出时不需要对精度特殊控制,用cout << ANSWER,或者printf("%g", ANSWER)即可。 - 样例输入
-
20
- 样例输出
-
59.9219 0.0195313
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 double h,sum=0; 6 cin >> h; 7 double t = h; 8 for (int i=0;i<10;++i) 9 { 10 sum += t*2; 11 t /= 2; 12 } 13 cout << sum-h<< endl; 14 cout << t; 15 return 0; 16 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。
程序要求输入一个整数,将经过处理得到1的过程输出来。 - 输入
- 一个正整数N(N <= 2,000,000)
- 输出
- 从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"End"。如果输入为1,直接输出"End"。
- 样例输入
-
5
- 样例输出
-
5*3+1=16 16/2=8 8/2=4 4/2=2 2/2=1 End
1 #include <iostream> 2 #include<cstdio> 3 using namespace std; 4 int main() 5 { 6 long long i; 7 scanf("%lld", &i); 8 while (i != 1) 9 { 10 if (i % 2) 11 { 12 printf("%lld*3+1=%lld\n", i, i * 3 + 1); 13 i = i * 3 + 1; 14 } 15 else 16 { 17 printf("%lld/2=%lld\n", i, i / 2); 18 i = i / 2; 19 } 20 } 21 printf("End\n"); 22 return 0; 23 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
监护室每小时测量一次病人的血压,若收缩压在90 - 140之间并且舒张压在60 - 90之间(包含端点值)则称之为正常,现给出某病人若干次测量的血压值,计算病人保持正常血压的最长小时数。
- 输入
- 第一行为一个正整数n,n < 100
其后有n行,每行2个正整数,分别为一次测量的收缩压和舒张压,中间以一个空格分隔。 - 输出
- 输出仅一行,血压连续正常的最长小时数。
- 样例输入
-
4 100 80 90 50 120 60 140 90
- 样例输出
-
2
1 #include <iostream> 2 #include<cstdio> 3 using namespace std; 4 int main() 5 { 6 int n, x, y,count=0,a=0; 7 cin >> n; 8 for (int i=0;i<n;++i) 9 { 10 cin >> x >> y; 11 if (x>=90&&x<=140&&y>=60&&y<=90) 12 { 13 count++; 14 if (a<=count) 15 { 16 a = count; 17 } 18 } 19 else 20 { 21 count=0; 22 } 23 } 24 cout << a; 25 return 0; 26 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。
- 输入
- 无。
- 输出
- 三行:
第一行是此自然数的十进制表示;
第二行是此自然数的七进制表示;
第三行是此自然数的九进制表示。 - 样例输入
-
(无)
- 样例输出
-
(不提供)
1 #include <iostream> 2 #include<cmath> 3 #include<cstdio> 4 using namespace std; 5 int main() 6 { 7 /*cout << 248 << endl; 8 cout << 503 << endl; 9 cout << 305 << endl;*/ 10 int a, b, c, n, i; 11 12 for (a = 1; a <= 6; a++) 13 { 14 for (b = 0; b <= 6; b++) 15 { 16 for (c = 1; c <= 6; c++) 17 { 18 if (a * 49 + b * 7 + c == c * 81 + b * 9 + a) 19 { 20 printf("%d\n", a * 49 + b * 7 + c); 21 printf("%d%d%d\n", a, b, c); 22 printf("%d%d%d\n", c, b, a); 23 24 } 25 } 26 } 27 } 28 return 0; 29 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。
现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。
- 输入
- 一个整数K。
- 输出
- 一个整数n。
- 样例输入
-
1
- 样例输出
-
2
1 #include <iostream> 2 #include<cstdio> 3 using namespace std; 4 int main() 5 { 6 int k; 7 int n = 0; 8 double u = 0; 9 cin >> k; 10 while (u<=k) 11 { 12 ++n; 13 u += 1.0 / n; 14 } 15 cout << n; 16 return 0; 17 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定一个整数,要求从个位开始分离出它的每一位数字。
- 输入
- 输入一个整数,整数在1到100000000之间。
- 输出
- 从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。
- 样例输入
-
123
- 样例输出
-
3 2 1
1 #include <iostream> 2 #include<cstdio> 3 using namespace std; 4 int main() 5 { 6 long long a; 7 cin >> a; 8 while (a!=0) 9 { 10 cout << a % 10 << " "; 11 a /= 10; 12 } 13 return 0; 14 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
- 输入
- 输入共 1 行,一个整数N。
-1,000,000,000 ≤ N≤ 1,000,000,000。 - 输出
- 输出共 1 行,一个整数,表示反转后的新数。
- 样例输入
-
样例 #1: 123 样例 #2: -380
- 样例输出
-
样例 #1: 321 样例 #2: -83
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int n, m = 0; 6 cin >> n; 7 for (; n != 0;) 8 { 9 m = m * 10 + n % 10; 10 n /= 10; 11 } 12 cout << m << endl; 13 return 0; 14 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
输入两个正整数 m 和 k,其中1 < m < 100000,1 < k < 5 ,判断 m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。
例如,输入:
43833 3
满足条件,输出YES。
如果输入:
39331 3
尽管有3个3,但不能被19整除,也不满足条件,应输出NO。 - 输入
- m 和 k 的值,中间用单个空格间隔。
- 输出
- 满足条件时输出 YES,不满足时输出 NO。
- 样例输入
-
43833 3
- 样例输出
-
YES
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int m,k,count=0; 6 cin >> m >> k; 7 if (m%19==0) 8 { 9 while (m!=0) 10 { 11 if (m%10==3) 12 { 13 count++; 14 m = m / 10; 15 } 16 else 17 { 18 m=m/10; 19 } 20 } 21 if (count==k) 22 { 23 cout << "YES"; 24 } 25 else 26 { 27 cout << "NO"; 28 } 29 } 30 else 31 { 32 cout << "NO"; 33 } 34 return 0; 35 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定正整数n,求不大于n的正整数的阶乘的和(即求1!+2!+3!+...+n!)
- 输入
- 输入有一行,包含一个正整数n(1 < n < 12)。
- 输出
- 输出有一行:阶乘的和。
- 样例输入
-
5
- 样例输出
-
153
1 #include <iostream> 2 using namespace std; 3 long fun(long long a) 4 { 5 if (a == 1) 6 { 7 return 1; 8 } 9 return a*fun(a - 1); 10 } 11 int main() 12 { 13 long long a; 14 long long sum = 0; 15 cin >> a; 16 for (int i=1;i<=a;++i) 17 { 18 sum += fun(i); 19 } 20 cout << sum; 21 return 0; 22 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
雇佣兵的体力最大值为M,初始体力值为0、战斗力为N、拥有X个能量元素。
当雇佣兵的体力值恰好为M时,才可以参加一个为期M天的战斗期,战斗期结束体力值将为0。在同一个战斗期内,雇佣兵每连续战斗n天,战斗力就会上升1点,n为当前战斗期开始时的战斗力。
一个战斗期结束后,雇佣兵需要用若干个能量元素使其体力恢复到最大值M,从而参加下一个战斗期。每个能量元素恢复的体力值不超过当前的战斗力。每个能量元素只能使用一次。
请问:雇佣兵的战斗力最大可以到达多少。
- 输入
- 一行包括三个整数M、N、X,相邻两个整数之间用单个空格隔开。M、N、X均为不超过10000的正整数。
- 输出
- 输出一个整数,为雇佣兵的最大战斗力。
- 样例输入
-
5 2 10
- 样例输出
-
6
1 #include <iostream> 2 #include<cmath> 3 using namespace std; 4 int main() 5 { 6 int m,n,x; 7 cin>>m>>n>>x; 8 while(n<=m&&x>0) 9 { 10 11 x=x-ceil(m*1.0/n); 12 if(x<0) 13 { 14 break; 15 } 16 n=n+floor(m*1.0/n); 17 } 18 cout<<n; 19 return 0;
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数.现求所有小于等于n(n < 100)的与7无关的正整数的平方和.
- 输入
- 输入为一行,正整数n(n < 100)
- 输出
- 输出一行,包含一个整数,即小于等于n的所有与7无关的正整数的平方和。
- 样例输入
-
21
- 样例输出
-
2336
1 #include <iostream> 2 #include<cmath> 3 #include<cstdio> 4 using namespace std; 5 int main() 6 { 7 int a; 8 long sum = 0; 9 cin >> a; 10 for (int i=1;i<=a;++i) 11 { 12 int t = i; 13 int b = t/ 10 % 10; 14 if (i<10) 15 { 16 if (i % 10 != 7) 17 { 18 sum += i * i; 19 20 } 21 } 22 else if (i%10!=7&&b!=7&&i%7!=0) 23 { 24 sum += i * i; 25 } 26 } 27 cout << sum; 28 return 0; 29 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定一个十进制正整数n,写下从1到n的所有整数,然后数一下其中出现的数字“1”的个数。
例如当n=2时,写下1,2。这样只出现了1个“1”;当n=12时,写下1,2,3,4,5,6,7,8,9,10,11,12。这样出现了5个“1”。
- 输入
- 正整数n。1 <= n <= 10000。
- 输出
- 一个正整数,即“1”的个数。
- 样例输入
-
12
- 样例输出
-
5
1 //无脑求,没办法时才用 2 #include <iostream> 3 using namespace std; 4 int main() 5 { 6 int n,count=0; 7 cin >> n; 8 for (int i=1;i<=n;++i) 9 { 10 if (i%10==1) 11 { 12 count++; 13 } 14 if (i/10%10==1) 15 { 16 count++; 17 } 18 if (i / 100% 10 == 1) 19 { 20 count++; 21 } 22 if (i / 1000 % 10 == 1) 23 { 24 count++; 25 } 26 if (i / 10000 % 10 == 1) 27 { 28 count++; 29 } 30 } 31 cout << count; 32 }
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int n; 6 cin >> n; 7 int count = 0; 8 for (int i=1;i<=n;++i) 9 { 10 int t = i; 11 while (t) 12 { 13 count += (t % 10 == 1) ? 1 : 0; 14 t /= 10; 15 } 16 17 } 18 cout << count; 19 return 0; 20 }
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
输入一个正整数n,求第n小的质数。
- 输入
- 一个不超过10000的正整数n。
- 输出
- 第n小的质数。
- 样例输入
-
10
- 样例输出
-
29
#include <iostream> #include <cstdlib> #include<cstdio> #include<cmath> using namespace std; int main() { int n,m=0; scanf("%d",&n);//cin >> n; int a[n];//int *a = (int *)malloc(n * sizeof(int)); int t = 0; for (int i = 2; ; ++i) { t = 0; for (int j = 2; j <=sqrt(i); ++j) { if (i%j == 0) { t++; } } if (t == 0) { a[m] = i; ++m; if (m==n) { printf("%d",a[n - 1]);//cout << a[n - 1]; //free(a); return 0; } } } } //注意有的编译器不支持cin>>n,inta[n],需要动态开辟空间
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。
你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。
- 输入
- 一个整数(范围1到10000),表示天数。
- 输出
- 骑士获得的金币数。
- 样例输入
-
6
- 样例输出
-
14
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int n,m=0,sum=0; 6 cin >> n; 7 int i = 1, l = 1; 8 while (i<=n) 9 { 10 sum += l * (i - m); 11 ++l; 12 m = i; 13 i += l; 14 } 15 if (i!=n) 16 { 17 sum += l * (n - m); 18 } 19 cout << sum << endl; 20 return 0; 21 }

浙公网安备 33010602011771号