掉入陷阱的数字、求交错序列前N项和、统计素数并求和、求分数序列前N项和、猴子吃桃问题

7-31 掉入陷阱的数字 (15 分)

对任意一个自然数N​0​​ ,先将其各位数字相加求和,再将其和乘以3后加上1,变成一个新自然数N1;然后对N​1重复这种操作,可以产生新自然数N2;……多次重复这种操作,运算结果最终会得到一个固定不变的数N​k,就像掉入一个数字“陷阱”。

本题要求对输入的自然数,给出其掉入“陷阱”的过程。

输入格式:
在一行内给出一个自然数N​0​​(N​0​​ <30000)。

输出格式:
对于输入的N​0,逐行输出其掉入陷阱的步骤。第i行描述N掉入陷阱的第i步,格式为: i:N​i(i≥1)。当某一步得到的自然数结果N​k​​ (k≥1)与上一步N​k−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);
}
posted @ 2019-11-17 18:37  subeiLY  阅读(384)  评论(0编辑  收藏  举报