2021-10-24

本文涵盖了多个编程挑战,包括计算正整数序列中奇数的和,使用幂级数求指数函数的近似值,序列求和,数字字符串转换,零钱换硬币的不同方式,水仙花数的查找,最大公约数与最小公倍数计算,物理问题的模拟以及打印菱形图案。每个挑战都提供了相应的代码实现,涉及数学、算法和逻辑思维。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本题要求计算给定的一系列正整数中奇数的和。

输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。

输出格式:
在一行中输出正整数序列中奇数的和。

输入样例:
8 7 4 3 70 5 6 101 -1
结尾无空行
输出样例:
116

#include <stdio.h>
int main()
{
	int n,sum=0;
	do{
		scanf("%d",&n);
		if(n%2>0){
			sum=sum+n;
		}
	}while(n>0);
	printf("%d",sum); 
} 

已知函数e x可以展开为幂级数在这里插入图片描述
现给定一个实数x,要求利用此幂级数部分和求e x 的近似值,求和一直继续到最后一项的绝对值小于0.00001。
输入格式:
输入在一行中给出一个实数x∈[0,5]。
输出格式:
在一行中输出满足条件的幂级数部分和,保留小数点后四位。
输入样例:
1.2
结尾无空行
输出样例:
3.3201

#include <math.h> 
int main()
{
	double i=1;
    float x;
	double e=1;
	double esp=1;
	double de=1;
	scanf("%f",&x);
	if(x<=5&&x>=0){

		do{
			de=de*i;	
			e=e+pow(x,i)/de;
			esp=pow(x,i)/de;
			i++;
  		}while(fabs(esp)>=0.00001);
		printf("%.4f",e);
	}
	return 0;
}

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围

#include <stdio.h>
int main()
{
	int n,i;
	double f=1,m=2,sum=0,temp;
	scanf("%d",&n);

	for(i=1;i<=n;i++){
		sum=sum+m/f;
		temp=m;
		m=m+f;
		f=temp; 
	}	
	printf("%.2f\n",sum);
} 

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。

输入格式:
输入在一行中给出不超过9的正整数a和n。

输出格式:
在一行中按照“s = 对应的和”的格式输出。

#include <stdio.h>
#include <math.h>
int main()
{
	int a,n,i,j;
	double sum=0,s=0;
	
	scanf("%d %d",&a,&n);
	if(a<=9&&n<=9){
	
		for(i=0;i<n;i++){
			
				s=a*pow(10,i)+s;
			
		sum=sum+s;
		}
		printf("s = %.0f\n",sum);
	}
}

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。

输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。

#include <stdio.h>
int main()
{
	int x;
	scanf("%d",&x);
	int i,j,k,total,count=0;
	
	if(x>8&&x<100){
		for(i=x/5;i>=1;i--){
			for(j=((x-5*i)/2);j>=1;j--){
					k=x-5*i-2*j;
				if(k>=1){
					total=i+j+k;
					count++;
					printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,total);
				}
			}
		}
		printf("count = %d",count);
	}
	return 0;
}

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。
本题要求编写程序,计算所有N位水仙花数。

输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。

输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。

#include <stdio.h>

	int pow(int a,int b){
    int i,t=a;
    for(i=1;i<b;i++){
        a=a*t;
    }
     return a;
}
int main()
{
	int a=100,b=1000,c=10000,d=100000,e=1000000;
	int n;
	scanf("%d",&n);
	
	if(n==3){
		while(a<1000){
			if(a==pow(a%10,3)+pow(a/10%10,3)+pow(a/100,3)) printf("%d\n",a);
			a++;	
		}
	}else if(n==4){
		while(b<10000){
			if(b==pow(b%10,4)+pow(b/10%10,4)+pow(b/100%10,4)+pow(b/1000,4)) printf("%d\n",b);
			b++;
		}
	}else if(n==5){
		while(c<100000){
			if(c==pow(c%10,5)+pow(c/10%10,5)+pow(c/100%10,5)+pow(c/1000%10,5)+pow(c/10000,5)) printf("%d\n",c);
			c++;
		}
	}else if(n==6){
		while(d<1000000){
			if(d==pow(d%10,6)+pow(d/10%10,6)+pow(d/100%10,6)+pow(d/1000%10,6)+pow(d/10000%10,6)+pow(d/100000,6)) 
			printf("%d\n",d);
			d++;
		}
	}else if(n==7){
		while(e<10000000){
			if(e==pow(e%10,7)+pow(e/10%10,7)+pow(e/100%10,7)+pow(e/1000%10,7)+pow(e/10000%10,7)+pow(e/100000%10,7)+pow(e/1000000,7)) 
			printf("%d\n",e);
			e++;
		}
	}
	return 0;//问题:为什么pow函数要自己写才会在n==7时不会运行超时。
}

本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:
输入在一行中给出两个正整数M和N(≤1000)。

输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

#include <stdio.h>
int main()
{
	int min,max;
	int m=0,n=0,r;
	int temp_1,temp_2;
	if(m<=1000&&n<=1000){
		scanf("%d %d",&m,&n); 
	}
	temp_1=m;temp_2=n;
	r=m%n;
	while(r!=0){
		m=n;
		n=r;
		r=m%n;
	}
	max=n;min=temp_1*temp_2/max;
	printf("%d %d",max,min);
	return 0;	
}

皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

输入格式:
输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。

输出格式:
在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

#include <stdio.h>
int main(){
	int n;//s为在空中所经历的路程;h为初始高度。
	int i; 
	double s=0,h;
	
	scanf("%lf %d",&h,&n);
	if(h>0&&n>0){
		for(i=1;i<=n;i++){
			s=s+h;
			h=0.5*h;
			s=s+h;	
		}
		s=s-h;
		printf("%.1f %.1f",s,h);
	}else if(n==0){
		s=0;
		h=0;
		printf("%.1f %.1f",s,h);
	}else if(h==0){
		s=h;
		printf("%.1f %.1f",s,h);
	}
}

本题要求编写程序,打印一个高度为n的、由“*”组成的正菱形图案。

输入格式:
输入在一行中给出一个正的奇数n。

输出格式:
输出由n行星号“*”组成的菱形,如样例所示。每个星号后跟一个空格

#include <stdio.h>
int main(){
	int n,i,j,h,count=0;
	scanf("%d",&n);
	h=(n+1)/2;
	if(n%2!=0){
		for(i=1;i<=h;i++){
				for(j=1;j<=h-i;j++){
					printf("  ");
				}
				for(j=0;j<2*i-1;j++){//实现每步都加2 
					printf("* ");
	 			}
			printf("\n");
			}
		}
			for(i=1;i<h;i++){
				
				for(j=0;j<i;j++){
				printf("  ");
				}
				for(j=2*(h-i)-1;j>0;j--){//实现每步都加2 
					printf("* ");
				}
				printf("\n");	
			}
	return 0;
}

一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?

输入格式:
输入在一行中给出正整数N(1<N≤10)。

输出格式:
在一行中输出第一天共摘了多少个桃子。

#include <stdio.h>
int main(){
	int n;//一共吃多少天
	scanf("%d",&n);
	int sum=1,i;
	
	if(n>1&&n<=10){
		
		for(i=1;i<n;i++){
			sum=(sum+1)*2;	
		}
		printf("%d",sum);
		return 0;
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值