1)内容:自拟两个题目,编写程序,要求每个程序语句最少不少于20条,每个程序至少两个及以上函数组成(包括main()函数)。2)形式:同前面作业的要求;我是初学者,请不要写太难的,那要我不容易理解你给我的回答不能运行啊 能帮我解决下吗
第1个回答 2012-05-02
发两个我之前编过的例子哈(例子看起来可能有点点长但不难,相信楼主只有稍微耐心点看肯定很容易理解的)
题目一、数学黑洞6174(这题目挺有意思哦~)
/*
数学黑洞6174。
已知:一个任意的四位正整数(全相同的除外,如1111)。将数字重新组合成一个最大的数
和最小的数相减,重复这个过程,最多七步,必得6174。即:7641-1467=6174。将永远出不来。
编程:输入任一四位数(全相同的除外),展示其操作过程并统计步骤。
*/
#include<stdio.h>
//插入排序
void insertSort(int r[],int len){
int i,k,tmp;
for(i=1;i<len;i++){
k=i-1;
tmp=r[i];
while(k>=0&&r[k]>tmp){
r[k+1]=r[k];
k--;
}
r[k+1]=tmp;
}
}
void main(){
int N,count,end,s;
int r[4];
int max,min;
printf("请输入一个任意的四位正整数(全相同的除外,如1111):");
scanf("%d",&N);
count=0;
end=0;
s=N;
while(end!=6174){
r[0]=s%10;
r[1]=s/10%10;
r[2]=s/100%10;
r[3]=s/1000;
insertSort(r,4);
max=1000*r[3]+100*r[2]+10*r[1]+r[0];
min=1000*r[0]+100*r[1]+10*r[2]+r[3];
end=max-min;
count++;
printf("第%d步:%d%d%d%d-%d%d%d%d=%d%d%d%d\n",count,r[3],r[2],r[1],r[0],r[0],r[1],r[2],r[3],end/1000,end/100%10,end/10%10,end%10);
s=end;
}
printf("%d一共经过了%d步得到了6174\n",N,count);
}
题目二、验证哥德巴赫猜想(也挺有意思滴吧~)
/*
验证歌德巴赫猜想:任何一个充分大的偶数N(N≥4,都可以用两个素数之和表示。
例如:4=2+2,6=3+3,8=3+5,98=17+79
"a+b":任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和
陈景润证明了"1+2"
*/
#include<stdio.h>
//判断一个数是否为素数
int isPrime(int n){
int i;
for(i=2;i*i<=n;i++){
if(n%i==0)
return 0;
}
return 1;
}
void main(){
int N;
int i,j;
int r;
printf("请输入一个偶数:");
scanf("%d",&N);
j=0;
for(i=2;i<N;i++){
if(isPrime(i)&&isPrime(N-i)){
r=i;
break;
}
}
printf("%d=%d+%d\n",N,r,N-r);
}
题目一、数学黑洞6174(这题目挺有意思哦~)
/*
数学黑洞6174。
已知:一个任意的四位正整数(全相同的除外,如1111)。将数字重新组合成一个最大的数
和最小的数相减,重复这个过程,最多七步,必得6174。即:7641-1467=6174。将永远出不来。
编程:输入任一四位数(全相同的除外),展示其操作过程并统计步骤。
*/
#include<stdio.h>
//插入排序
void insertSort(int r[],int len){
int i,k,tmp;
for(i=1;i<len;i++){
k=i-1;
tmp=r[i];
while(k>=0&&r[k]>tmp){
r[k+1]=r[k];
k--;
}
r[k+1]=tmp;
}
}
void main(){
int N,count,end,s;
int r[4];
int max,min;
printf("请输入一个任意的四位正整数(全相同的除外,如1111):");
scanf("%d",&N);
count=0;
end=0;
s=N;
while(end!=6174){
r[0]=s%10;
r[1]=s/10%10;
r[2]=s/100%10;
r[3]=s/1000;
insertSort(r,4);
max=1000*r[3]+100*r[2]+10*r[1]+r[0];
min=1000*r[0]+100*r[1]+10*r[2]+r[3];
end=max-min;
count++;
printf("第%d步:%d%d%d%d-%d%d%d%d=%d%d%d%d\n",count,r[3],r[2],r[1],r[0],r[0],r[1],r[2],r[3],end/1000,end/100%10,end/10%10,end%10);
s=end;
}
printf("%d一共经过了%d步得到了6174\n",N,count);
}
题目二、验证哥德巴赫猜想(也挺有意思滴吧~)
/*
验证歌德巴赫猜想:任何一个充分大的偶数N(N≥4,都可以用两个素数之和表示。
例如:4=2+2,6=3+3,8=3+5,98=17+79
"a+b":任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和
陈景润证明了"1+2"
*/
#include<stdio.h>
//判断一个数是否为素数
int isPrime(int n){
int i;
for(i=2;i*i<=n;i++){
if(n%i==0)
return 0;
}
return 1;
}
void main(){
int N;
int i,j;
int r;
printf("请输入一个偶数:");
scanf("%d",&N);
j=0;
for(i=2;i<N;i++){
if(isPrime(i)&&isPrime(N-i)){
r=i;
break;
}
}
printf("%d=%d+%d\n",N,r,N-r);
}