第三十三、三十四课(函数练习)
练习1:哥德巴赫猜想
【题目描述】
哥德巴赫猜想的命题之一是:大于6 的偶数等于两个素数之和。编程将6~100所有偶数表示成两个素数之和。
【输入】
(无)
【输出】
分行输出:
例如:
6=3+3
8=3+5
...
(每个数只拆开一次,请保证第一个加数最小)
【输入样例】
(无)
【输出样例】
(无)
【来源】
#include
int gc();
int sushu(int n);
int main()
{
int i;
for(i=6;
i<=100;
i=i+2)
{
gc(i);
}
return 0;
}
int gc(int n)
{
int i;
for(i=2;
i<=n/2;
i++)
{
if(sushu(i)==1&&sushu(n-i)==1)
{
printf("%d=%d+%d\n",n,i,n-i);
break;
}
}}
int sushu(int n)
{
int i;
for(i=2;
i<=n/2;
i++)
{
if(n%i==0)
return 0;
}
return 1;
}
二进制分类 【题目描述】
若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。
例如:
(13)10=(1101)2,其中1的个数为3,0的个数为1,则称此数为A类数;
(10)10=(1010)2,其中1的个数为2,0的个数也为2,称此数为B类数;
(24)10=(11000)2,其中1的个数为2,0的个数为3,则称此数为B类数;
【第三十三、三十四课(函数练习)】程序要求:求出1~1000之中(包括1与1000),全部A、B两类数的个数。
【输入】
(无)
【输出】
一行,包含两个整数,分别是A类数和B类数的个数,中间用单个空格隔开。
【输入样例】
(无)
【输出样例】
#include
int ejzfl();
int main()
{
int n,i,s1=0,s2=0;
for(i=1;
i<=1000;
i++)
{
if(ejzfl(i)==1)
s1++;
else
s2++;
}
printf("%d %d",s1,s2);
return 0;
}
int ejzfl(int n)
{
int a[1000],b[1000],i=0,j=0;
a[0]=n;
while(a[i]!=0)
{
a[i+1]=a[i]/2;
if(a[i]%2==1)
{
j++;
}
i++;
}if(j>(i-j))
{
return 1;
}
else
{
return 0;
}
}
推荐阅读
- 第6.2章(设置属性)
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 第三节|第三节 快乐和幸福(12)
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- android第三方框架(五)ButterKnife
- 开学第一天(下)
- 一个人的碎碎念
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 第326天