7-31 掉入陷阱的数字 (15 分)
对任意一个自然数N0 ,先将其各位数字相加求和,再将其和乘以3后加上1,变成一个新自然数N1;然后对N1重复这种操作,可以产生新自然数N2;……多次重复这种操作,运算结果最终会得到一个固定不变的数Nk,就像掉入一个数字“陷阱”。
本题要求对输入的自然数,给出其掉入“陷阱”的过程。
输入格式:
在一行内给出一个自然数N0(N0 <30000)。
输出格式:
对于输入的N0,逐行输出其掉入陷阱的步骤。第i行描述N掉入陷阱的第i步,格式为: i:Ni(i≥1)。当某一步得到的自然数结果Nk (k≥1)与上一步Nk−1相同时,停止输出。
输入样例:
5
输出样例:
1:16
2:22
3:13
4:13
#include <stdio.h>
int main()
{
int num,n1=0,n2=0,i,j=1;
scanf("%d",&num);
while(num != n1){//查看是否与上一数相等
n1 = num;//记录上一次的数
for(i=0,n2=0;i<5;i++){//求每位数和
n2 += num%10;
num /=10;
}
num = n2 *3 +1;
printf("%d:%d\n",j,num);
j++;
}
return 0;
}
7-32 求交错序列前N项和 (15 分)
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,结果保留三位小数。
输入样例:
5
输出样例:
0.917
#include <stdio.h>
int main()
{
int N,t=-1;
double sum=0.0,i;
scanf("%d",&N);
for(i = 1;i<=N;i++){
t =- t;
sum = sum+(t*i/(2*i-1));
}
printf("%0.3f",sum);
return 0;
}
7-33 统计素数并求和 (20 分)
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
#include <stdio.h>
#include <math.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
int i;
int count=0,sum=0;
for(a;a<=b;a++){
int a_1;
a_1=sqrt(a);
for(i = 2;i<=a_1;i++){
if(a%i==0){
break;
}
}
if(i>a_1){
if(a==1){
count=count;
}else{
sum = sum+a;
count++;
}
}
}
printf("%d %d",count,sum);
return 0;
}
7-34 求分数序列前N项和 (15 分)
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
20
输出样例:
32.66
#include <stdio.h>
int main()
{
int number,i;
double sum=0,a=2,b=1,a1;
scanf("%d",&number);
for(i=1;i<=number;i++){
sum = sum+a/b;
a1=b;
b=a;
a=a+a1;
}
printf("%.2f",sum);
return 0;
}
7-35 猴子吃桃问题 (15 分)
一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?
输入格式:
输入在一行中给出正整数N(1<N≤10)。
输出格式:
在一行中输出第一天共摘了多少个桃子。
输入样例:
3
输出样例:
10
#include <stdio.h>
int main()
{
int n,s=1,i;
scanf("%d",&n);
for(i=0;i<n-1;i++){
s=(s+1)*2;
}
printf("%d",s);
}