大家好,本人刚上大一,就读于一所双非院校的机械类专业,但我对计算机和编程都很感兴趣,为此我在打算在寒假时间自学c语言,在B站上看一些视频,也刷了一些编程题。感觉很有成就感,虽然都是最基础简单的一些代码。就比如下面这道题。
变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。
例如:
655 = 6 * 55 + 65 * 5
1461 = 1*461 + 14*61 + 146*1
求出 5位数中的所有 Lily Number。
我最开始是这样写的
#include<stdio.h>
int sum(int a,int b,int c,int d,int e)
{
int q = a, w = b, y = c, r = d, t = e;
return q * 10000 + w * 1000 + y * 100 + r * 10 + t;
}
int main()
{
int a = 1, b, c, d, e = 0;
for (a = 1; a < 9; a++)
{
for (b = 0; b < 9; b++)
{
for (c = 0; c < 9; c++)
{
for (d = 0; d < 9; d++)
{
for (e = 0; e < 9; e++)
{
if (sum(a, b, c, d, e) == a * sum(0, b, c, d, e) + sum(0, 0, 0, a, b)*sum(0, 0, c, d, e) + sum(0, 0, a, b, c)*sum(0, 0, 0, d, e) + sum(0, a, b, c, d)*e)
printf("%d ", sum(a, b, c, d, e));
}
}
}
}
}
return 0;
}
太麻烦了,后来研究了一下发现一个规律🤔例如:12345可分为12345/10,12345%10,得到1234与5,同理12345/100,12345%100...然后得到下面的代码。
#include<stdio.h>
int main()
{
int number, j;
for (number = 10000; number < 99999; number++)
{
int sum = 0;
for (j = 10; j <= 10000; j = j * 10)
{
sum = sum + (number / j)*(number%j);//灵活运用整除与取模将数字拆分
}
if (sum == number)
printf("%d ", number);
}
return 0;
}
这样就简单多了,应充分应用计算机运算速度快的优点,让单调重复的工作让机器去完成。
在学习各种计算机语言时都应该多思多想,培养自己的计算机思维。
我在学习的过程中也感到过迷茫,但我相信只要我们不断努力,就一定能实现我们的理想。拿一个好offer,过上幸福生活。让我们一起努力,加油!🤗