本来不打算发博客呢,但是在小老弟的督促下还是决定要坚持!要坚持!
今天比较忙,没抽出时间写新的题目,这里就拿一道我计算机专业的小宝贝儿的题来说说吧!
【问题描述】验证哥德巴赫猜想:任何一个大于6的偶数均可表示两个素数之和。例如,6=3+3,8=3+5,…,18=5+13,要求将6-100之间的偶数都表示为两个偶数之和,输出时一行输出五组。
【输入形式】无输入
【输出形式】按从小到大,每组五行。每组的格式为:四位=2位+2位。等号和加号两侧无空格。
话说过来,这还是我第一次用C++写一个完整的程序,居然不是Hello World,哈哈哈!这个问题呢写完之后成就感也挺大的,是挺有趣的一道编程题。这道题可以看作是几个小问题合起来的一个大问题,可能看题目感觉很慌张,但是一句一看的话发现还是相对轻松的。
C++写法
#include<iostream>
#include <iomanip>
using namespace std;
int prime(int m);
int main()
{
int i, j, k, count = 0;
for (i = 6; i <= 100; i += 2) //轮询大于六小于一百的偶数
{
for (j = 3; j <= i / 2; j++) //从3开始看有没有i的因数,i/2和sqrt(2)的性质类似
{
if (prime(j) && prime(i - j))//方法调用,i=j+i-j
{
cout <<setw(4)<<setfill('0')<<i<<'='<<setw(2)<<setfill('0')<<i-j<<'+'<<setw(2)<<setfill('0')<<j<<" ";//这些C++的输出我都是现搜现用的十分感人!!!
count++;
if (count == 5) //格式输出,控制每组五行
{
cout <<'\n';
count = 0;
}
break;
}
}
}
return 0;
}
int prime(int m)//声明判断是否为素数的方法
{
int i;
for (i = 2; i <= m - 1; i++)
{
if (m % i == 0)
return 0;//调用时值为假
}
return 1;//调用时值为真
}
C写法
#include<stdio.h>
#include<math.h>
int prime(int m);
int main()
{
int i, j, k, count = 0;
for (i = 6; i <= 100; i += 2)
{
for (j = 3; j <= sqrt(i); j++)
{
if (prime(j) && prime(i - j))
{
printf("%4d=%02d+%2d", i,j,i-j);//为了赶进度我直接把0补上去了,马上熄灯断网了,我明天回来改
count++;
if (count == 5)
{
printf("\n");
count = 0;
}
break;
}
}
}
return 0;
}
int prime(int m)
{
int i;
for (i = 2; i <= m - 1; i++)
{
if (m % i == 0)
return 0;
}
return 1;
}
11.20补充:
C语言中0的补位
%0nd
C++中0的补位
setfill("0")
今天只能匆忙结束了,我明天会回来补充一些东西。
Bingo!
今天是忙碌的一天呢!
我最终还是没能来得及写完他。
已经是第二天了…
我一定会回来补一种不用调用方法的解法。