“C天取经”的第一难————循环练习题

 前言:

             距离第一次发的blog已经快一个多月了,我对“C天取经”之路的不易早就下好心理预设,没想到还是被打的有点猝不及防,“C天取经”的第一难就这么来了——竞赛班的选拔。

 正文:

           国庆前,当已经学完数组的我,遇上竞赛班的模拟题时,尽管不是一次性的写完运行出来,但还是有些思路,磕磕绊绊的敲了出来(题目如下)。

【1】红玫瑰数练习
题目:一个红玫瑰数,每个位数的四次方等于原数,求1—10000中的红玫瑰数。

(其实刚开始的我不懂得太多的计算机思维,头铁纯粹硬打,利用数学逻辑一一列举讨论了出来)

就有了我人生第一个写出的练习题代码:

【纯数学思维】:

#include <stdio.h>
#include <math.h>
int main() {

        printf("输出1-10000之中的红玫瑰数\n");
		for (int a = 1; a <= 10000; a++)
		{
			if (a < 10 && pow(a, 4) == a)
			{
				printf("%d\n", a);\\排查1-9的数
			}
			else if (10 <= a && a < 100 && pow(a / 10, 4) + pow(a % 10, 4) == a)
			{
				printf("%d\n", a);\\排查10-99的数
			}
			else if (100<=a&&a < 1000 && pow((a / 100), 4) + pow((a/10)%10, 4) + pow((a%10),4)==a)
			{
				printf("%d\n", a);\\排查100-999的数
			}
			else if(1000<=a&&a<10000&& pow((a / 1000), 4) + pow(( a / 100)% 10, 4) + pow((a /10)%10, 4)+ pow((a % 10), 4) == a)
			{
				printf("%d\n", a);\\排查1000-9999数
			}
			else if(a==10000&&pow(1,4)==10000)
			{
				printf("%d\n", a);\\排查100000
			}
		}


	return 0;
}

(后面在询问过老师与网络查找后,就有了第二个代码) 

【编程思维】:

#include <stdio.h>
int main() {
	printf("输出1-10000之内的红玫瑰数\n");
	for (int num = 1; num < 10000; num++)
	{
		int sum = 0;
		int origin = num;//因为下面进行循环后会对原始的num进行篡改,所以要保留原来值
		int c = num;//下面会对num进行篡改所以要另取一个值,去进行下面的循环
		do
		{
			int b = c % 10;//取余数——相当于依次取尾数位    eg:1234---->4
			int d = b*b*b*b;//进行每个位数的四次方运算          d=4*4*4*4
			sum += d;//用于每一位的次方后的相加                 ......			
			c /=10;//除去尾数位                                 1234---->123
		} while (c != 0);//先执行再判断
		if(sum==origin)
		{
			printf("%d\n", origin);
		}
	}
	return 0;
}

小结:

       从中学到了思维的转换,尽管不多。

【2】水仙花数练习

题目:水仙花是指一个3位数,他的每一个位数上的数字的立方和等于它本身,例如:153=1^3+5^3+3^3。给定整数l,r,【l,r】方位内的请你输出所有范围内的水仙花数。

(不久后第二个模拟题就来了,有着上次的经验,尽管打出来后的代码还有很多语法毛病,但是依旧十分的有成就感)

#include <stdio.h>
int main()
{
	int l = 1; int r = 1;
	int muh = 0; int sum = 0;
	 printf("请输入l与r的值(l<r):");
	 scanf_s("%d %d",&l,&r);
	 for (int num = l + 1; num < r; num++)
	 {
		 sum = 0;
		 int origin = num;
		 int c = num;
		 while (c != 0)
		 {
			 int a = c % 10;
			 int b = a * a * a;
			 sum += b;
			 c /= 10;
		 }
		 if (origin == sum)
		 {
			 muh++;
		 }
	 }
	     if (muh == 0)
		 {
			 printf("no \n");
		 }
		 else  
		 {
			 printf("\n范围内水仙花的个数为:%d\n", muh);
	      }

		return 0;
}

取经之路怎么可能这么简单呢?

果不其然,十月八号的真正考试选拔让我真正的看清了自己的水平,考完的那一晚,道心破碎,秋天晚上凛冽的风都熄灭不了内心的狂躁,说实话打击很大,后劲也很大。

(具体题目路径如下:蓝桥云课中的竞赛题)

本人还未搞明白,“C天取经第一难”未完待续......

赠(自己与路过的那个陌生人):

             路虽远,行则将至;事虽难;做则必成。

             望与诸君共勉之

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值