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 }

 

posted @ 2020-11-22 20:53  丁帅帅dss  阅读(826)  评论(0)    收藏  举报