题目打印出所有的“水仙花数”,所谓“水仙花数”是指2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
}
❖ 题目:输入两个正整数m和n,求其最大公约数和最小 公倍数。
❖ 程序分析:利用辗除法
❖ GCD(A, B)=GCD(B, A%B)
❖ 当A%B==0时,B即为最大公约数
❖ GCD〔12,18〕=GCD〔18,12〕
#include “stdio.h〞
main()
{int max, next, n;
scanf(“%d〞,&next);
max=next;
/* 第一个数就是最大数 */
for (n=2;n<=10; n++) /* 输入另外的九个数,并依次 {scanf(“%d〞,&next); 比较出最大数 */
if (next>max) max=next; }
printf(“max=%d\n〞, max); /* 打印出最大数 */ }
问题:求出以“9999〞作为结束标志的一组整数的最大数。 例如输入:123 45 5678 34 9999 67 23456,输出结果为 5678,即对9999及其以后的数不作处理。
if (n%i==0) { flag=0; break; } if (flag==1) printf(“该数是素数〞〕;
else printf(“该数不是素数〞); }
❖ 猴子吃桃问题:猴子第一天摘下假设干个桃子,当即 吃了一半,还不瘾,又多吃了一个第二天早上又将剩 下的桃子吃掉一半,又多吃了一个。以后每天早上都 吃了前一天剩下的一半零一个。到第10天早上想再吃 时,见只剩下一个桃子了。求第一天共摘了多少。
for(A=1; A<=5; A++)
for(B=1; B<=5; B++)
for(C=1; C<=5; C++)
for(D=1; D<=5; D++)
for(E=1; E<=5; E++)
{ cc1=((B==2)&&(!(A==3)))||((!(B==2))&&(A==3));
cc2=((B==2)&&(!(E==4)))||((!(B==2))&&(E==4));

=GCD〔12,6〕

=GCD〔6,0〕
❖ 所以12和18的最大公约数为6
main() {
int a,b,temp; printf("please input two numbers:\n"); scanf("%d,%d",&a,&b); while(b!=0) /*利用辗除法,直到b为0为止*/ {
{ g=1;
printf("A %d\n", A); printf("B %d\n", B); printf("C %d\n", C);
printf("D %d\n", D); printf("E %d\n", E); }};
if(g!=1) printf("Can't found!\n"); }
❖ 题目:两个乒乓球队进行比赛,各出三人。甲队为 a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。 有人向队员打听比赛的名单。a说他不和x比,c说他不 和x,z比,请编程序找出三队赛手的名单。
main()
{ int i,j,k,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++)
{
i=n/100;
/*分解出百位*/
j=n/10%10;
/*分解出十位*/
k=n%10;
/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)水仙花数的逻辑判断条件
printf("\n%ld\n",i);
数,这说明此数是完全平方数*/
}
}
❖ 题目:某个公司采用公用 传递数据,数据是四位的整数, 在传递过程中是加密的,加密规那么如下:每位数字都加上 5,然后用和除以10的余数代替该数字,再将第一位和第四位 交换,第二位和第三位交换。
main()
{int a,i,aa[4],t;
temp=a%b; a=b; b=temp; } printf("gongyueshu:%d\n",a); }
问题:假设要求两个数的最小公倍数,该如何修改程序?
❖ 素数问题:从键盘上任意输入一个十进制整数,判断 该数是否是一个素数。假设是,那么输出“该数是素 数〞;否那么输出“该项数不是素数〞。
❖ 算法分析: ❖ 〔1〕增加标志flag。flag=1表示是素数,flag=0表示
❖ 程序分析:采取逆向思维的方法,从后往前推断。 ❖ T N=T N-1-〔T N-1 / 2+1〕 ❖ T N-1=2*T N + 2 ❖ T10=1〔倒推出T N,N=9,8,……1〕
main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
{x1=(x2+1)*2; x2=x1;
main()
{
char i,j,k;
/* i是a的对手,j是b的对手,k是c的对手 */
for(i='x';i<='z';i++)
for(j='x';j<='z';j++)
{
if(i!=j)
for(k='x';k<='z';k++)
{ if(i!=k&&j!=k)
{ if(i!='x'&&k!='x'&&k!='z')
#include “stdio.h〞
main()
{int max, next, n;
scanf(“%d〞,&next);
max=next;
/* 第一个数就是最大数 */
for ( ; next!=9999; scanf(“%d〞,&next) )
{ if (next>max) max=next; }
int k=0, n;
num1为原始数据,num2为倒序数据,
scanf(“%ld〞, &num1); k为num1的位数,n为num1别离出的个位;+; n=num1%10;
num2=num2*10+n;
num1=num1/10;}
printf(“num1是一个%ld位数\n〞, k);
cc3=((C==1)&&(!(D==2)))||((!(C==1))&&(D==2));
cc4=((C==5)&&(!(D==3)))||((!(C==5))&&(D==3));
cc5=((E==4)&&(!(A==1)))||((!(E==4))&&(A==1)); if(((cc1+cc2+cc3+cc4+cc5)==5)&&(A!=B)&&(A!=C)&&(A!=D)&&(A!=E)&&(B!=C)&&(B!=D)&& (B!=E)&&(C!=D)&&(C!=E)&&(D!=E))
不是素数。、 ❖ 〔2〕一个数只能被1和其本身整除,就是素数,因此
需从2到n-1逐一判断〔实际只需要到n/2〕
#include “stdio.h〞 main() { int n, i,flag=1;
printf(“请输入一个十进制整数〞); scanf(“%d〞,&n); for (i=2;i<n/2; i++)
if (max!=9999) printf(“max=%d\n〞, max);
}
❖ 问题描述:5位跳水高手参加10米高台跳水决赛,有好事者让 5人据实力预测比赛结果.

A选手说:B第二,我第三;

B选手说:我第二,E第四;

C选手说:我第一,D第二;

D选手说:C最后,我第三;

E选手说:我第四,A第一.
/*第一天的桃子数是第2天 桃子数加1后的2倍*/
day--;
}
printf("the total is %d\n",x1);
}
main() { int day,x=1;
for(day=9;day<=1;day- -) x=(x+1)*2;
printf("the total is %d\n",x); }
printf("%-5d",n);
}
printf("\n");
}
❖ 最大数问题:从键盘上任意输入10个整数,求出其中 的最大数。
❖ 算法分析: ❖ 〔1〕设第一个数就是最大数max; ❖ 〔2〕假设最大数max<下一个数next,那么该数应为所
输入的所有数中的最大数(max← next),否那么最大 数保持不变; ❖ 〔3〕n个数要进行n-1次比较
/*前两个月加起来赋值给第三个月*/
f2=f1+f2; }
/*前两个月加起来赋值给第三个月*/
}
❖ 题目:打印出杨辉三角形〔要求打印出10行如以下图〕 1.程序分析:

1
11
121
1331
14641
1 5 10 10 5 1
main()
{int i, j, a[10][10];
printf("\n");
printf(“num2=%d\n〞, num2);
}
❖ 题目:一个整数,它加上100后是一个完全平方数,再 加上168又是一个完全平方数,请问该数是多少?
❖ 程序分析:在10万以内判断,先将该数加上100后再开 方,再将该数加上268后再开方,如果开方后的结果满 足如下条件,即是结果。
#include "math.h"
❖ 题目:给一个不多于5位的正整数,要求:一、求它是 几位数,二、逆序打印出各位数字。
❖ 分析:当num1!=0时, ❖ 别离个位数n,位数k++,同时num2=num2*10+n ❖ 丢去num1的个位数,并重复以上操作
main()
{long num1, num2=0;/*定义可处理的数据范围是长整型数*/
{for(j=0;j<=i;j++)
/* 第i行打印i个元素 */
printf("%5d",a[i][j]);
printf("\n");
}
}
冒泡排序法:从键盘上输入一组数,将其按从大到小 的顺序输出。
算法描述: 〔1〕每每相邻的两个数比较,使得大数下沉,小数上 浮〔内循环共进行n-1次〕; 〔2〕 反复进行以上操作,直到所有的数排序结束〔外 循环共n-1轮〕 〔3〕假设要提高效率,可以改变内循环次或加上标志 位的方法
scanf("%d",&a);
aa[0]=a%10; aa[1]=a%100/10;
aa[2]=a%1000/100; aa[3]=a/1000;
for(i=0;i<=3;i++)
{aa[i]+=5; aa[i]%=10; } /*每位数加5取余作为加密码
for(i=0;i<=3/2;i++)
*/
{t=aa[i]; aa[i]=aa[3-i]; aa[3-i]=t; }
main()
{
long int i,x,y,z;
for (i=1;i<100000;i++)
{ x=sqrt(i+100);
/*x为加上100后开方后的结果*/
y=sqrt(i+268);
/*y为再加上168后开方后的结果*/
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该
for(i=3;i>=0;i--)
/* 1、3交换,2、4交换 */
printf("%d",aa[i]);
}
❖ 古典问题:有一对兔子,从出生后第3个月起每个月都 生一对兔子,小兔子长到第三个月后每个月又生一对 兔子,假设兔子都不死,问每个月的兔子总数为多少?
❖ 程序分析: 兔子的规律为数列 1,1,2,3,5,8,13,21....
❖ 即从第三项开始,其每一项为哪一项前两项之和
main()
{ long f1,f2;
int i;
f1=f2=1;
for(i=1;i<=20;i++)
{ printf("%12ld %12ld",f1,f2);
if(i%2==0) printf("\n"); /*控制输出,每行四个*/
f1=f1+f2;
for(i=0;i<10;i++)
/* 每行的第一和最后一个元素为1 */
{a[i][0]=1; a[i][i]=1;}
for(i=2;i<10;i++)
for(j=1;j<i;j++)
/* 每行中间元素值确实定 */
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
❖ 决赛成绩公布之后,每位选手的预测都只说对了一半,即一对一 错.请编程解出比赛的实际名次.
#include <iostream.h>
void main()
{ int cc1,cc2,cc3,cc4,cc5; int A,B,C,D,E; int g;
/* cc1到cc5代表5位选手的逻辑判断 */ /* A,B,C,D,E分别代表5位选手的名次 */ /* 问题是否解决的BOOL值 */
相关文档
最新文档