1-利用for嵌套证明哥德巴赫的猜想
题目:
哥德巴赫猜想中写到,一个充分大的偶数(大于等于4),它可以分解为两个素数(质数)的和。
任务是将输入的偶数n ,分解为两个素数的所有可能打印出来。
例如:
8 = 3 + 5.
20 = 3 + 17 20 = 7 + 13.
42 = 5 + 37 40= 11 + 31 40= 13 + 29 40= 19 + 23.
先分解成c=a+b;在依次对a和b进行判断是否是质数,如果同时是质数,就打印。
一个数是否是质数,就是一个数只能被1和它自身整除,没有其他因子。就需要尝试它能否被从2到它的平方根之间的数整除。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_34660409/article/details/80245719
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
void main()
{
long m, n, num, i, j;//num=m+n,num>=6&&num为偶数
scanf("%ld",&num);
for (m = 3; m <= num / 2; m += 2)//c=a+b,那么,其中的一个数必定奇数,直接m=3开始我们的循环
{
for (i = 2; i <= sqrt(m); i++)//判断拆分出来c=m+n;,m质数的判断
if (m % i == 0)break;
if (i > sqrt(m))
{
n = num - m;//n是否为质数的判断
for (j = 2; j <= sqrt(n); j++)
if (n % j == 0)
break;
if (j > sqrt(n))
printf("%ld=%ld+%ld\n",num,m,n);
}
}
}
这里打印的数是num=m+n>=6的偶数
运行结果如下:
2-水仙花问题
该数本身等于个位数,十位数,百位数的立方之和
类如:153=1*3+5*3+3*3
153=1+125+27;
这是经典的水仙花问题
分析题目,得到方法1:
输入一个数字num
百位数a=num/100;
十位数b=num/10%10;
个位数c=num/10;
num=a*3+b*3+c*3;判断是否满足
void main()
{
int num, a, b, c;//a为百位数,b为十位数,c为个位数
scanf("%d",&num);
a = num / 100;
b = num / 10 % 10;
c = num % 10;
if (num == a * a * a + b * b * b + c * c * c)
{
printf("yes,num=%d,%d=%d+%d+%d\n", num, num, a, b, c);
}
else
printf("NO\n,a=%d,b=%d,c=%d",a,b,c);
}
初始代码想法与编程的实现,下一步我们需要用for循环来寻找100--999的三位数中的所有满足“水仙花”的数字
只需改变num用于循环的判断,设定条件100-999;
2.还需要把else 给删去;(程序中不是满足的条件就直接不要,不然信息太多了)
代码的实现如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void main()
{
int num, a, b, c;
for (num = 100; num<= 999; num++)
{//a为百位数,b为十位数,c为个位数
a = num / 100;
b = num / 10 % 10;
c = num % 10;
if (num == a * a * a + b * b * b + c * c * c)
{
printf("yes,num=%d,%d=%d+%d+%d\n", num, num, a, b, c);
}
}
}
运行结果如下:
4-利用for循环嵌套打印菱形
问题分析:
实际输出的效果用“*”组成我们的菱形
需要用两个for循环
第一个for循环为外循环代表行数,第二个for循环为内循环打印的“*”的个数;
由菱形图案可知:
(图先欠着)
行数
1 *
2 ***
3 *****
4 *******
可得到设i为行数,j为打印的个数
i,j=i*2-1;
并且每打完一行,需要换行。
由此可得,初步设想
void main()
{
int i, j;
for(i=1;i<=10;i++)
{
for (j = 1; j <= i * 2 - 1; j++)
{
printf("*");
}
printf("\n");
}
}
附上运行结果
我们这时候只打印了4分之一个图像。
第二步:
那我们此时需要在加入一个for来去输出printf(" ")( 空格)
第一
弄出位子打印空格
第二
打印*
第三
换行
下半部分
我们需要for去改变一些
改变m的值
m为m=10;m>=1;m--
运行结果如下:
如果大家喜欢就多多点赞,谢谢了