【C语言入门级题目3】剩余材料最少问题、平均分、s=a+aa+aaa+aaa...a,数字灯谜、百万富翁与陌生人换钱、求n的所有质数因子

写在开头:题源来自于凌云、吴海燕、谢满德老师们编著的《C语言程序设计与实践》第五章C语言结构的课后练习题。

编译器:Dev C++

代码是根据自己的逻辑来实现的,部分题目的算法思想写在了程序代码的注释中。有些解法仅仅是能够实现最终结果,但不一定是最优算法,比如有许多两个for循环甚至三个或更多的for循环暴力实现的算法,这些算法是一定可以优化的。希望我的解法能够给大家有所帮助,如果读者大大们有更好的思路和算法,也希望能在评论区留下更宝贵的智慧。在这里插入图片描述

  1. 一根长度为133米的材料,需要截成长度为19米和23米的短料,求解两种材料分别截多少根时,剩余的材料最少
/*一根长度为133米的材料,需要截成长度为19米和23米的短料,求解两种材料分别截多少根时,剩余的材料最少*/
#include<stdio.h>
#define  shorter 19
#define  longer 23
#define	amount 133
int main(){	
	int i,j;
	int mod,short_num,long_num;
	int min=133;
	for(i=1;i<7;i++){
		for(j=1;j<13;j++){
			mod = amount-shorter*j-longer*i;
			if(mod>=0&&mod<min){
				short_num = j;
				long_num=i;
				min=mod;
			}
		}
	}
	printf("需要19米长的材料%d根,23米长的材料%d根时,剩余材料最少,为%d米\n",short_num,long_num,min);
}

效果图如下:

在这里插入图片描述

  1. 七个评委,去掉一个最高分,去掉一个最低分,求平均分
/*七个评委,去掉一个最高分,去掉一个最低分,求平均分*/
#include<stdio.h>
int main(){	//设满分10,最低分为0 
	int i,score;
	float avg_score;
	int min=100;
	int max=0;
	int sum=0;
	printf("7个评委的评分为:\n");
	for(i=0;i<7;i++){
		scanf ("%d",&score);
		if(score<0||score>10){
			printf("输入非法!");
			return -1; 
		}
		if(score<min){
			min = score;	//记录并刷新最小值 
		}
		if(score>max){
			max = score;	//记录并刷新最大值 
		}
		sum += score;	//累加所有的分数 
	} 
	avg_score = (sum-min-max)/5.0;	//减去最低分和最高分,取平均值 
	printf("该选手的分数为:%4.2f",avg_score);
	return 0;
} 

效果图如下:

在这里插入图片描述

  1. 编程求S = a+aa+aaa+…+aaa…a
/*编程求S = a+aa+aaa+...+aaa...a*/
#include<stdio.h>
int main(){
	int i;
	int sum;
	int a,n;
	printf("请输入a的值,和最终相加的位数n(0<n<6):\n");
	scanf("%d %d",&a,&n);
	sum = a;
	printf("%d",a);
	for(i=1;i<n;i++){
		a = a*10+a%10;	//每一项的变化 
		printf("+%d",a);
		sum += a;	//逐项和相加 
	}
	printf("=%d\n",sum);
	return 0;
} 

效果图如下:

在这里插入图片描述

  1. 数字灯谜:若ABCD-CDC=ABC,求A,B,C,D各个值
/*若ABCD-CDC=ABC,求A,B,C,D各个值*/ 
#include<stdio.h>
int main(){
	int a,b,c,d;
	int f_num,l_num,result;
	int sum;
	int count=0;
	for(a=1;a<10;a++){
		for(b=0;b<10;b++){
			for(c=0;c<10;c++){
				for(d=0;d<10;d++){
					f_num = a*1000+b*100+c*10+d;	//被减数
					l_num = c*100+d*10+c;			//减数
					sum = f_num - l_num;			//减法的结果
					result = a*100+b*10+c;			//最终结果
					if(sum == result){
						count++;
						printf("ABCD-CDC=ABC 则:A=%d B=%d C=%d D=%d\n",count,a,b,c,d);
					} 
				}
			}
		}
	}
	return 0;
} 

效果图如下:

在这里插入图片描述

  1. 陌生人与百万富翁换钱计划:陌生人每天给百万富翁10万元。百万富翁每天给陌生人第一天的钱是1分,第二天给2分,第三天给4分
    以后每一天给的钱是前一天的两倍。持续三十天后,两个人分别给了对方多少钱?
/*陌生人与百万富翁换钱计划:陌生人每天给百万富翁10万元。百万富翁每天给陌生人第一天的钱是1分,第二天给2分,第三天给4分
以后每一天给的钱是前一天的两倍。持续三十天后,两个人分别给了对方多少钱?*/
#include<stdio.h>
int main(){
	float stranger = 100000;
	float rich = 0.01;
	float stranger_give = 0;
	float rich_give = 0;
	int i;
	for(i=0;i<30;i++){
		stranger_give += stranger;
		rich *= 2;
		rich_give += rich;
	}
	printf("30天后,穷人给富人%.2f元,富人给穷人%.2f元\n",stranger_give,rich_give);
	return 0;
} 

效果图如下:

在这里插入图片描述

  1. 输入一个数n,输出n的所有质数因子

算法思想:从最小的质数2开始,将2的n词幂整除后,出现n个为2的质数因子,剩下的商就不再含有2的质数因子,
若商不等于0,继续整除下一个整数因子,直到余数不为零。

 /*输入一个数n,输出n的所有质数因子*/
/*算法思想:从最小的质数2开始,将2的n词幂整除后,出现n个为2的质数因子,剩下的商就不再含有2的质数因子,
若商不等于0,继续整除下一个整数因子,直到余数不为零。*/ 
#include <stdio.h>
int main()
{
    int i,n;
    scanf("%d",&n);
    for(i=2; i<=n; i++)
    {	//从2开始判断
        while(n%i==0)
        {
            printf("%d ",i);
            n/=i;	//若整除,则分离出质数因子  
        }
    }
}

效果图如下:

在这里插入图片描述

到此为止,又解决了6道C语言程序题。这样C语言结构方面的入门题就结束了,接下来会进行数组部分的C语言入门级题目。希望自己的解法能对各位看官有所帮助,也期待读者大大们的赞和交流评论。我会继续坚持。

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

White白小纯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值