C趣味程序百例(19)1~9组成三个3位的平方数
- 格式:doc
- 大小:27.50 KB
- 文档页数:5
精选文档从键盘输入三个数,找出它们的最小值#include<stdio.h>main(){floata,b,c,min;printf("inputthreenumbers:");scanf("%f%f%f",&a,&b,&c);if(a>b)min=b;elsemin=a;if(min>c)min=c;printf("min=%f\n",min);}2.输出九九乘法表#include<stdio.h>main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%2d",i,j,i*j);printf("\n");}}3.编程找出全部水仙花数#include<stdio.h>main(){intx,a,b,c;for(x=100;x<=999;x++){a=x/100;b=x%100/10;c=x%10;if(a*a*a+b*b*b+c*c *c==x);printf("%d",x);}}1.从键盘输入三个数找出它们的均匀数#include<stdio.h>main(){floata,b,c,aver;scanf("%f%f%f",&a,&b,&c);aver=(a+b+c)/3; printf("aver=%f\n",aver);}2.输出两个正整数的全部条约数#include<stdio.h>main(){inta,b,i,n;scanf("%d%d",&a,&b);if(a>b){n=b,b=a,a=n;}for(i=1;i<=a;i++){if(a%i==0&&b%i==0)printf("%2d",i);}printf("\n");return0;}.精选文档3.输出一个3*4的矩阵中的最小值,矩阵的数据从键盘输入#include<stdio.h>main(){inti,j,min,a[3][4];{printf("原矩阵a[%d][%d]:\n",3,4);for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);}printf("\n");min=a[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++){if(min>a[i][j])min=a[i][j];}printf("theminnumber%3d",min);}1.从键盘输入圆的半径,计算圆的面积和周长#include<stdio.h>#definePImain(){floatr,s,l;printf("请输入圆的半径");scanf("%f",&r);s=PI*r*r;l=PI*r*2;printf("s=%f,l=%f\n",s,l);}2.从键盘输入10个数字,用起泡法从小到大排序#include<stdio.h>intmain(){inta[10];inti,j,t;printf("input10number:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("thesortednumber:\n");for(i=0;i<10;i++)printf("%5.0d",a[i]);printf("\n");return0;}}.精选文档3.从入 10个数,算它的最大#include<stdio.h>main(){floatx,max;inti;printf("入第一个数:");scanf("%f",&x);max=x;for(i=1;i<=9;i++){printf("入第%d个数:");scanf("%f",&x);if(x>max)max=x;}printf("10个数中最大:%f\n",max); }1.从入方形的和,算方形的面和周#include<stdio.h>main(){floata,b,s,l;printf("入方形的和");scanf("%f%f",&a,&b);s=a*b;l=2*(a+b);printf("s=%f,l=%f\n",s,l);}2.算s=1+2+3⋯+100#include<stdio.h>main(){inti=2,sum=0;do{sum=sum+i;i=i+2;}while(i<=100);printf("sum=%d\n",sum);}3.出一个3*3矩的置矩,矩的数据从入#include<stdio.h>main(){inti,j,temp,a[3][3];{printf("原矩a[%d][%d]:\n",3,3);for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);}for(i=0;i<2;i++)for(j=i+1;j<3;j++)if(i!=j){temp=a[i][j];a[i][j]=a[j][i];a[j][i]=temp;} printf("置矩A[%d][%d]:\n",3,3);for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%4d",a[i][j]);printf("\n");}}.1.从键盘输入三个整数,找出它们的最大值#include<stdio.h>main(){inta,b,c,max;printf("inputthreenumber:");scanf("%d%d%d",&a,&b,&c);if(a>b){max=a;}else{max=b;}if(max<c)max=c;printf("max=%d\n",max);}2.从键盘输入一行字符,统计所输入字符的个数#include<stdio.h>main(){intn=0;printf("inputastring:\n");while(getchar()!='\n')n++;printf("%d\n",n);}3.计算两个正整数的最小公倍数#include<stdio.h>main(){intm,n,r,g,p,h;printf("请输入求最小公倍数的数:"); scanf("%d%d",&m,&n);p=m*n;while((r=m%n)!=0){m=n;n=r;}g=n;printf("h=%d\n",h);}从键盘输入十个数,计算它们的最小值#include<stdio.h>main(){floatx,min;inti;printf("请输入第一个数:");scanf("%f",&x);min=x;for(i=1;i<=9;i++){printf("请输入第%d个数:");scanf("%f",&x);if(x<min)min=x;}printf("10个数中最小是:%f\n",min);}.从键盘输入十个数,计算他们的均匀值#include<stdio.h>main(){floatx,sum,d;inti;printf("请输入第一个数:");scanf("%f",&x);sum=x;for(i=1;i<=9;i++){printf("请输入第%d个数:",i+1);scanf("%f",&x);sum=sum+x;}d=sum/10.0;printf("10个数的均匀值是:%f\n",d); }计算s=1+3+5+7+...+99#include<stdio.h>main(){inti=1,sum=0;do{sum=sum+i;i=i+2;}while(i<=99);printf("sum=%d\n",sum);}计算s=2+4+6+8+...+100#include<stdio.h>main(){inti=2,sum=0;do{sum=sum+i;}while(i<=100);printf("sum=%d\n",sum);}计算s=n!(n从键盘输入)#include<stdio.h>main(){intn,i;doublefact=1;printf("请输入随意数:\n");scanf("%d",&n);for(i=1;i<=n;i++)fact=fact*i;printf("%5.0f%3d!\n",fact,n);}计算两个正整数的最大条约数#include<stdio.h>main(){intm,n,r,g,p;printf("请输入求最大条约数的数:"); scanf("%d%d",&m,&n);while((r=m%n)!=0){m=n;n=r;}g=n;printf("g=%d\n",g);}.数列:1 1 2 3 5 ...从第三项起每项数据都是其前两项之和计算该数列的前15项。
初中数学竞赛:数论的方法技巧数论是研究整数性质的一个数学分支,它历史悠久,而且有着强大的生命力。
数论问题叙述简明,“很多数论问题可以从经验中归纳出来,并且仅用三言两语就能向一个行外人解释清楚,但要证明它却远非易事”。
因而有人说:“用以发现天才,在初等数学中再也没有比数论更好的课程了。
任何学生,如能把当今任何一本数论教材中的习题做出,就应当受到鼓励,并劝他将来从事数学方面的工作。
”所以在国内外各级各类的数学竞赛中,数论问题总是占有相当大的比重。
数学竞赛中的数论问题,常常涉及整数的整除性、带余除法、奇数与偶数、质数与合数、约数与倍数、整数的分解与分拆。
主要的结论有:1.带余除法:若a,b是两个整数,b>0,则存在两个整数q,r,使得a=bq+r (0≤r<b),且q,r是唯一的。
特别地,如果r=0,那么a=bq。
这时,a被b整除,记作b|a,也称b是a 的约数,a是b的倍数。
2.若a|c,b|c,且a,b互质,则ab|c。
3.唯一分解定理:每一个大于1的自然数n都可以写成质数的连乘积,即其中p1<p2<…<pk为质数,a1,a2,…,ak为自然数,并且这种表示是唯一的。
(1)式称为n的质因数分解或标准分解。
4.约数个数定理:设n的标准分解式为(1),则它的正约数个数为:d(n)=(a1+1)(a2+1)…(ak+1)。
5.整数集的离散性:n与n+1之间不再有其他整数。
因此,不等式x<y与x≤y-1是等价的。
下面,我们将按解数论题的方法技巧来分类讲解。
一、利用整数的各种表示法对于某些研究整数本身的特性的问题,若能合理地选择整数的表示形式,则常常有助于问题的解决。
这些常用的形式有:1.十进制表示形式:n=an10n+an-110n-1+…+a0;2.带余形式:a=bq+r;4.2的乘方与奇数之积式:n=2m t,其中t为奇数。
例1 红、黄、白和蓝色卡片各1张,每张上写有1个数字,小明将这4张卡片如下图放置,使它们构成1个四位数,并计算这个四位数与它的各位数字之和的10倍的差。
四、编写程序题及参考答案导读:虽然题目基本按照教材章节顺序排列的,但是把同类题目尽量排在一起,便于读者学习掌握编程方法和思路,提高自己的编程能力。
【】已知银行整存整取存款不同期限的月息利率分别为:% 期限一年% 期限二年月息利率= % 期限三年% 期限五年% 期限八年要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。
【】输入年份year和月month,求该月有多少天。
判断是否为闰年,可用如下C语言表达式:year%4==0 && year%100!=0 || year%400==0。
若表达式成立(即表达式值为1),则year为闰年;否则,表达式不成立(即值为0),year为平年。
【】编写一个简单计算器程序,输入格式为:data1 op data2。
其中data1和data2是参加运算的两个数,op为运算符,它的取值只能是+、-、*、/。
【】输入n值,输出如图所示矩形。
【】输入n值,输出如图所示平行四边形。
【】输入n值,输出如图所示高为n的等腰三角形。
【】输入n值,输出如图所示高为n的等腰三角形。
【】输入n值,输出如图所示高和上底均为n的等腰梯形。
【】输入n值,输出如图所示高和上底均为n的等腰空心梯形。
【】输入n值,输出如图所示边长为n的空心正六边型。
【】输入n值,输出如图所示图形。
【】输入n值,输出如图所示图形。
【】输入n值,输出如图所示图形。
【】输入n值,输出如图所示图形。
【】输入n值,输出如图所示图形。
上一页下一页【】输入n值,输出如图所示图形。
(例为n=6时)【】编写程序,输出如图所示sin(x) 函数0到2π的图形。
【】编写程序,在屏幕上输出一个由*号围成的空心圆。
【】编写程序,在屏幕上绘制如图余弦曲线和直线。
若屏幕的横向为x轴,纵向为y轴,在屏幕上显示0~360度的cos(x)曲线与直线x=f(y)=45*(y-1)+31的迭加图形。
其中cos图形用"*"表示,f(y)用"+"表示,在两个图形的交点处则用f(y)图形的符号。
程序设计试题及答案(备注:试题难度评价采取五★级评价体系,分基础、容易、一般、稍难、难五个等级,其中的一、二、三★级都属于程序设计的基础试题级别,同学们稍加思考均有能力求得正确解答,对于四★级试题属于程序设计试题基础级别的思考题,五★级难度试题在此没有涉及,在程序设计高级试题中另行讲解。
对于基础和容易两个级别的程序设计试题,若能够给出语句分类(如If条件语句、条件语句嵌套、循环语句、多重循环语句等)的将尽量给出。
若属于13大类别的将尽量标注。
)程序设计试题几大分类:1、1\素数类问题(求素数的几种算法):2、数据排序问题(数据排序的几种方法):3、最大公约数和最小公倍数问题(几种算法):4、公式求解类问题(如求圆周率π、自然常数e、解方程等等):5、编号相反处理问题:6、约瑟夫问题(或猴子选大王问题、密码问题):7、回文数问题:8、高精度数值计算问题:9、数值计算问题:10、进制相互转换问题:11、字符串倒置问题:12、排列与组合类问题:13、因子、质因子(质因数)类相关问题:答案部分:(程序设计的源程序没有统一的标准答案,实现程序的算法也是多种多样,但结果是唯一的,算法也有优劣之分,一个程序的优劣,关键在于是否找到了好的算法,以下程序和算法不一定就是最佳算法和最佳程序,只能仅供参考,希望同学们能够对某些程序提出更好的算法来改进程序)(经常碰到的判断是否为素数、是否为回文数、求两个数的最大公约数、求两个数的最小公倍数等问题的子函数源程序,请务必记住!)①判断是否为素数,若是素数则返回true,若不是素数则返回false:function prime(x:longint):boolean;varj,y:longint;beginprime:=true;if x<2 then prime:=false;y:=trunc(sqrt(x));for j:=2 to y doif (x mod j = 0) thenbegin prime:=false; exit; end;end;备注:1~100之间所有的素数:2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97。
【题3】数字分组将1,2...9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。
例如:三个三位数192,384,576满足以上条件。
题解设三组为(a1,a2,a3)、(b1,b2,b3)、(c1,c2,c3)。
我们通过枚举a1,b1,c1→枚举a3,计算b3、c3→枚举a2,计算b2、c2列举出三组数据的所有可能情况:1.枚举a1,b1,c11≤a1≤3,a1*2≤b1≤a1*2+1,a1*3≤c1≤min{ a1*3+2,9} 条件:b1≠c12.枚举a3,计算b3、c31≤a3≤9,b3=( a3*2) mod 10,c3=( a3*3) mod 10 条件:(a3≠5)∧({ a1,b1,c1}*{ a3,b3,c3}={})3.枚举a2,计算b2、c21≤a2≤9,a2∉{ a1,b1,c1,a3,b3,c3};b2=(a2*2+⎥⎦⎥⎢⎣⎢10*23a)mod 10 ;c2=45- a1- a2 -a3 -b1 -b2 -b3 -c1 -c3条件:({ a2,b2,c2}*{ a3,b3,c3}={})∧(a1*200+a2 *20+a3*2= b1 *100+b2 *10+b3)∧(a1*300+a2 *30+a3*3= c1 *100+c2 *10+c3)满足上述条件的所有(a1,a2,a3)、(b1,b2,b3)、(c1,c2,c3)即为解。
由此得出算法:for a1←1 to 3 do {枚举a1,b1,c1}for b1←a1*2 to a1*2+1 dofor c1←a1*3 to min(a1*3+2,9) do if b1≠c1then for a3←1 to 9 do {枚举a3,计算b3、c3}beginb3←(a3*2) mod 10;c3←(a3*3) mod 10;if (a3≠5) and ([a1,b1,c1]*[a3,b3,c3]=[])then for a2←1 to 9 do {枚举a2,计算b2、c2}if not (a2 in [a1,b1,c1,a3,b3,c3])then beginb2←(a2*2+(a3*2) div 10) mod 10;c2←45-a1-a2-a3-b1-b2-b3-c1-c3;if ([a2,b2,c2]*[a3,b3,c3]=[])and (a1*200+a2*20+a3*2=b1*100+b2*10+b3)and (a1*300+a2*30+a3*3=c1*100+c2*10+c3)then writeln(a1,a2,a3,’’,b1,b2,b3,’’,c1,c2,c3)end;{then}end;{for}下面,给出一种优化方法:设三组数为a,a*2,a*3,显然a的范围为123≤a≤329。
趣味 c 语言编程100 例【程序 1】题目:有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、 2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++) / *以下为三重循环 */for( j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k) /* 确保 i 、 j、 k 三位互不相同 */printf("%d,%d,%d\n",i,j,k);}}程序 2】题目:企业发放的奖金根据利润提成。
利润 (I) 低于或等于 10 万元时,奖金可提 10% ;利润高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10% 提成,高于 10 万元的部分,可可提成 7.5% ; 20 万到 40 万之间时,高于 20 万元的部分,可提成 5% ; 40 万到 60 万之间时高于40 万元的部分,可提成 3% ;60 万到 100 万之间时,高于 60 万元的部分,可提成 1.5% ,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1. 程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2. 程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}【程序 3】题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?1. 程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数加上 268 后再开方,如果开方后的结果满足如下条件,即是结果。
三阶幻方的N种构造方法说起幻方,许多人见惯不怪了。
最简单的莫过于三阶幻方或者说四阶幻方,三阶幻方是由1到9这9个数填进3X3的九宫图中,使每行,每列和对角线的三个数之和相等(3阶,幻和为15)。
三阶幻方最早起源于我国,古代人们将三阶幻方称之为“河图”和“洛书”我国宋代数学家杨辉称之为“纵横图”。
好了,其他的不多说了,让我们直奔主题吧。
第一种:变形法将1~9数依顺序填入下框;2和6对调,4和6对调;将2、4、6、8向四个角外移。
这样就快速完成3阶幻方了。
第二种:楼梯法在第一行的中间填上1.,然后依次在“右上角”填上2(下一个数),再在2的“右上角”(相对的)填上3,依次类推。
当遇到“右上角”已经有数的时候,就填在原地的下一个格,再运用楼梯法继续填,知道填到最后一个数。
□n□□□□□由于3的右上角已经有数了,所以4要填在3的下一个格。
□n□N n n□□再填5在4的右上角,就这样以此类推。
n□□□s就这样就完成了。
还有,这种方法适用于所有的奇数幻方。
第三种:推理法①1〜9个数填入九宫图,容易推出幻和为15,而用1〜9个数有以下的算式组合。
1+5+9=152+5+8=153+5+7=154+5+6=152+6+7=152+5+8=152+4+9=154+3+8=158+1+6=15观察上面9条算式容易知道,5出现了4次,1、3、7、9出现了2次,2、4、6、8出现了3次。
再回来想想九宫格的位置特性,中间的格一定要满足4条算式(中间行,中间列,2对角线)成立,故中间应该填的是5;n n nM M nO o o四个角的格也要各满足3条算式成立,故四个角的格应该填的是2、4、6、8。
nn M nt□(其实不用下面步骤都可以构造出来了,因为幻和为15,可以推算出。
)同理, 1、3、7、9应该填在前行前列的中间。
这样的话,就很容易构造出3阶幻方。
n n n□o所以得出的3阶幻方如下:□t Q t第四种:推理法②前提条件:已知幻和=15,中间是5。
完成下列训练题的基本步骤是:1、问题分析及解决方案框架确定充分地分析和理解问题本身,明确问题到底要做什么。
(what to do?)在确定解决问题框架过程中(how to do?),考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。
2、详细设计和编码确定算法的主要流程,在此基础上进行代码设计(coding),一般来讲,每个明确的功能模块程序不超过60行代码,否则,功能要继续分解。
3、上机前编写程序与检查上机前检查程序可有效提高调试效率,减少上机调试程序时的无谓错误。
程序检查主要有两种途径:用一组测试数据手工执行程序;或者通过阅读或给别人讲解自己的程序而深入、全面地理解程序逻辑,把程序中的明显错误事前排除。
4、上机调试程序提供的结果应当包括:算法、数据结构的设计、程序清单1、猜数游戏游戏的开始由机器产生一个随机数(1~100之间,用库函数random()取值),然后游戏者在程序的提示下猜数,若输入的数比这个数大,程序提示“your answer is HIGH,try again!”否则,程序提示“your answer is LOW,try again!”直到猜对为止。
程序可以实现连续猜数,直到游戏者退出。
程序输出要求:累计游戏者猜对这个数所需的次数n,当n<=7时,给出“congratulation!”,当7<n<15时,给出“I believe you can do it better!”;当n>15时,用exit(0)库函数退出程序。
2、百钱百鸡问题(穷举算法)我国古代数学家张丘建在《算经》中出了一道题“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”注:穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特性。
使用穷举法的关键是确定正确的穷举范围,即不能过分扩大,也不能过分缩小穷举的范围。
三位数的平方速算技巧平方是数学中常见的运算方式之一,计算平方数时有许多技巧可以帮助我们快速得出结果。
本文将介绍一些三位数的平方速算技巧,帮助大家在计算平方时更加轻松快捷。
1. 以5为中心思考我们可以以5为中心来思考三位数的平方。
对于以5为百位的数,其平方的百位数一定是2,十位数一定是5,个位数一定是5。
例如,以5为百位的数的平方,百位数为2,十位数为5,个位数为5。
如55的平方为3025,555的平方为308025。
通过这个规律,我们可以快速得出以5为百位的三位数的平方结果。
2. 以9为中心思考类似于以5为中心思考,我们也可以以9为中心来思考三位数的平方。
对于以9为百位的数,其平方的百位数一定是8,十位数一定是1,个位数一定是1。
例如,以9为百位的数的平方,百位数为8,十位数为1,个位数为1。
如99的平方为9801,999的平方为998001。
通过这个规律,我们可以快速得出以9为百位的三位数的平方结果。
3. 利用差的平方对于以其他数字为百位的三位数,我们可以利用差的平方来快速计算。
以n为百位的数的平方可以表示为(n+1)00 + (n+1)(n-1)。
例如,以7为百位的数的平方为700 + 7 × 6 = 700 + 42 = 742。
以8为百位的数的平方为800 + 8 × 7 = 800 + 56 = 856。
通过这个规律,我们可以快速得出其他以数字为百位的三位数的平方结果。
4. 利用交叉相乘对于两个相邻的三位数a和b,可以利用交叉相乘的方式快速计算它们的平方差。
平方差等于(a+b) × (a-b)。
例如,我们要计算98的平方减去97的平方,可以计算(98+97) × (98-97) = 195 × 1 = 195。
同样地,我们可以利用这一方法快速计算其他相邻三位数的平方差。
5. 利用十位数的平方对于以1到9为个位数的三位数,我们可以利用十位数的平方来快速计算。
答案仅供参考实验一4.设计main函数实现从键盘上输入两个整型变量a、b的值,交换它们的值并输出。
#include<>void main(){int a,b,c;printf("enter first integer : ");scanf("%d",&a);printf("enter second integer : ");scanf("%d",&b);c=a;a=b;b=c;printf("%d,%d\n",a,b);getch();}5.设计main函数实现从键盘上输入两个整型变量a、b的值,并将b的值加入到a中,输出a的值。
#include<>void main(){int a,b,c;printf("enter first integer : ");scanf("%d",&a);printf("enter second integer : ");scanf("%d",&b);c=a+b;a=c;printf("a=%d,b=%d\n",a,b);getch();}6.从键盘输入整数x的值,根据公式y=x3+3x2+x-10求y的值,输出x和y的值。
#include<>void main(){int x,y;printf("enter first integer : ");scanf("%d",&x);y=x*x*x+3*x*x+x-10;printf("x=%d,y=%d\n",x,y);getch();}实验二1.编写程序,从键盘上输入一个整数(例如560)表示分钟,将其换算成用小时和分钟表示,然后输出至屏幕。
三阶幻方公式简易口诀三阶幻方是指由1到9的九个数字组成的一个3x3的方阵,使得方阵中的每一行、每一列以及对角线上的数字之和都相等。
下面是一个简单的口诀来求解三阶幻方的公式:首先,我们需要把9个数字按照一定的规律填入到3x3的方阵中。
设置一个3x3的方阵如下:abcdefghi第一步:选取任意一个数字填入中间的位置,比如选取数字5,填入方阵的中心位置e:abcd5fghi第二步:根据魔方的特性,可以得出以下规律:1.真正的幻方中心位置的值将会是(n^2+1)/2,对于三阶幻方来说,中心位置的值为(3^2+1)/2=52.方阵的每个角的位置必须是n的倍数,对于三阶幻方来说,四个角的值即为1、3、7、9根据以上两个规律,我们可以进行以下步骤填充幻方:第三步:将数字1填入到方阵的上一个位置g(此处的上指的是在方阵中“上方”相对于中心位置e的方向):abc15fghi第四步:根据规律2,将数字9填入到方阵的下一个位置f(此处的下指的是在方阵中“下方”相对于中心位置e的方向):abc159ghi第五步:根据规律2,将数字3填入到方阵的下一个位置h(此处的下指的是在方阵中“下方”相对于中心位置e的方向):abc159g3i第六步:根据规律2,将数字7填入到方阵的下一个位置d(此处的下指的是在方阵中“下方”相对于中心位置e的方向):abc15973i第七步:根据规律1,将数字8填入到方阵的下一个位置b(此处的下指的是在方阵中“下方”相对于中心位置e的方向):a8c15973i第八步:根据规律1,将数字4填入到方阵的下一个位置f(此处的下指的是在方阵中“下方”相对于中心位置e的方向):a8c159734最终得到了一个三阶幻方。
利用以上口诀和规律,我们可以通过简单的步骤来构造三阶幻方。
通过这个口诀,我们可以快速而准确地创建出一个三阶幻方,仅需一些简单的数字填充操作。
C/c++趣味程序百例(献给C/C++初学者)(三)41.马克思手稿中的数学题马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,在一家饭馆吃饭花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人?*问题分析与算法设计设x,y,z分别代表男人、女人和小孩。
按题目的要求,可得到下面的方程:x+y+z=30 (1)3x+2y+z=50 (2)用方程程序求此不定方程的非负整数解,可先通过(2)-(1)式得:2x+y=20 (3)由(3)式可知,x变化范围是0~10*程序说明与注释#include<stdio.h>int main(){int x,y,z,count=0;printf(" Men Women Children\n");printf("........................................\n");for(x=0;x<=10;x++){y=20-2*x; /*x定值据(3)式求y*/z=30-x-y; /*由(1)式求z*/if(3*x+2*y+z==50) /*当前得到的一组解是否满足式(2)*/printf(" %2d: %d %d %d\n",++count,x,y,z);}}42.最大公约数和最小公倍数求任意两个正整数的最大公约数和(GCD)和最小公倍数(LCM)*问题分析与算法设计手工方式求两个正整数的蝚大公约数的方法是用辗转相除法,在程序中可以模拟这种方式。
*程序说明与注释#include<stdio.h>int main()int a,b,num1,num2,temp;printf("Input a & b:");scanf("%d%d",&num1,&num2);if(num1>num2) /*找出两个数中的较大值*/{temp=num1; num1=num2; num2=temp; /*交换两个整数*/}a=num1; b=num2;while(b!=0) /*采用辗转相除法求最大公约数*/{temp=a%b;a=b;b=temp;}printf("The GCD of %d and %d is: %d\n",num1,num2,a); /*输出最大公约数*/printf("The LCM of them is: %d\n",num1*num2/a); /*输出最小公倍数*/ }*运行结果1.Input a & b: 20 55The GCD of 20 and 55 is: 5The LCM of them is: 2202.Input a & b: 17 71The GCD of 17 and 71 is: 1The LCM of them is: 12073.Input a & b: 24 88The GCD of 24 and 88 is: 8The LCM of them is: 2644.Input a & b: 35 85The GCD of 35 and 85 is: 5The LCM of them is: 595*思考题求一个最小的正整数,这个正整数被任意n(2<=n<=10)除都是除不尽的,而且余数总是(n-1)。
(1)魔方阵 ①问题描述魔方阵是一个古老的智力问题,它要求在一个m ×m 的矩阵中填入1~m 2的数字(m 为奇数),使得每一行、每一列、每条对角线的累加和都相等,如图1所示。
②基本要求● 输入魔方阵的行数m ,要求m 为奇数,程序对所输入的m 作简单的判断,如m 有错,能给出适当的提示信息。
● 实现魔方阵。
● 输出魔方阵。
③实现提示本实验使用的数据结构是数组。
解魔方阵问题的方法很多,这里采用如下规则生成魔方阵。
● 由1开始填数,将1放在第0行的中间位置。
● 将魔方阵想象成上下、左右相接,每次往左上角走一步,会有下列情况:✧ 左上角超出上方边界,则在最下边相对应的位置填入下一个数字; ✧ 左上角超出左边边界,则在最右边相应的位置填入下一个数字; ✧ 如果按上述方法找到的位置已填入数据,则在同一列下一行填入下一个数字。
以3×3魔方阵为例,说明其填数过程,如图2所示。
图2 三阶魔方阵的生成过程由三阶魔方阵的生成过程可知,某一位置(x,y)的左上角的位置是(x-1,y-1),如果x-1≥0,不用调整,否则将其调整为x-1+m ;同理,如果y-1≥0,不用调整,否则将其调整为y-1+m 。
所以,位置(x,y)的左上角的位置可以用求模的方法获得,即:x=(x-1+m)%my=(y-1+m)%m如果所求的位置已经有数据了,将该数据填入同一列下一行的位置。
这里需要注意的是。
此时的x和y已经变成之前的上一行上一列了,如果想变回之前位置的下一行同一列,x需要跨越两行,y需要跨越一列,即:x=(x+2)%my=(y+1)%m源代码:#include<stdio.h>void mofangzhen(int m){int a[100][100];int b,x,y;for(x=0;x<m;x++){for(y=0;y<m;y++)a[x][y]=0;}x=0;y=(m-1)/2;a[x][y]=1;for(b=2;b<=m*m;b++){if(x-1<0) x=(x-1+m)%m;else x=x-1;if(y-1<0) y=(y-1+m)%m;else y=y-1;if(a[x][y]!=0){x=(x+2)%m;y=(y+1)%m;}a[x][y]=b;}for(x=0;x<m;x++){for(y=0;y<m;y++)printf("%4d",a[x][y]);printf("\n");}}void main(){int m;m=0;while(m%2!=1){printf("请输入矩阵阶数m(奇数):");scanf("%d",&m);if(m%2!=1)printf("m输入错误\n");}mofangzhen(m);}。
三项平方公式
三项平方公式是三个数的平方和的某种形式,可以表示为:
(a+b+c)^2 = a^2+b^2+c^2+2(ab+bc+ca)
这个公式可以用于计算一些数学问题,比如说在几何学中求三角形面积和周长等问题。
其中a,b,c 表示三个数字,^2 代表平方,括号中的数字为组合数,如ab+bc+ca 代表三个数字相乘的不同组合方式。
这个公式是由二项式定理演变而来的,而二项式定理则是由二项式定理平方展开得到的。
三项平方公式是一种重要的数学公式,在数学和统计学中都有应用。
例如在数学中,可以用来证明一些关于三角形周长和面积的公式,如果知道三边长度就能算出周长和面积.
在统计学中,可以用来计算一些数据的平均值、方差、标准差等,这些都是统计学中常用的计算方法.
总之,三项平方公式是一个重要的数学公式,不仅在数学中有广泛应用,在其
他学科中也有重要意义.。
F o r p e s n a u s e o n y s u d y a n d r e s a c h n o f r c m me r c a u s e薂请编写程序,找出所有满足下列条件的三位正整数并输出:它既是完全平方数,又有两位数字相同,如:121,225等。
芃#include <stdio.h>腿#include <math.h>莆void main(void)羃{蚀int i,ge,shi,bai,count=0;羈double pfg;莆printf("\n符合条件的数字如下:\n");莃for(i=100;i<1000;i++)蒂{羀ge=i%10;蒆shi=i/10%10;螄bai=i/100;袀pfg=sqrt(i);//求平方根蝿if(((ge==shi)+(shi==bai)+(ge==bai)==1)&&(pfg*pfg==i))薆{膅printf("%10d",i);薂count++;薈}蚅}节printf("\n共计:%d个。
\n",count); }仅供个人用于学习、研究;不得用于商业用途。
For personal use only in study and research; not for commercial use.Nur für den persönlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet werden.Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales.толькодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях.以下无正文仅供个人用于学习、研究;不得用于商业用途。
C趣味程序百例(19)1~9组成三个3位的平方数
61.1~9组成三个3位的平方数
将1、2、3、4、5、6、7、8、9九个数字分成三组,每个数字只能用一次,即每组三个数不允许有重复数字,也不许同其它组的三个数字重复,要求每组中的三位数都组成一个平方数。
*问题分析与算法设计
本问题的思路很多,这里介绍一种简单快速的算法。
首先求出三位数中不包含0且是某个整数平方的三位数,这样的三位数是不多的。
然后将满足条件的三位数进行组合,使得所选出的3个三位数的9个数字没有重复。
程序中可以将寻找足条件的三位数的过程和对该三位数进行数字分解的过程结合起来。
*程序与程序注释
#include
void main()
{
int a[20],num[20][3],b[10]; /*a:存放满足条件的三位数*/
/*若不是10 的倍数,则分解三位数*/
/*分解该三位数中的每一个数字*/
int i,j,k,m,n,t,flag;
printf("The 3 squares with 3 different digits each are:\n");
for(j=0,i=11;i<=31;i++) /*求出是平方数的三位数*/
if(i%10!=0) /*若不是10的倍数,则分解三位数*/
{
k=i*i; /*分解该三位数中的每一个数字*/
num[j+1][0]=k/100; /*百位*/
num[j+1][1]=k/10%10; /*十位*/
num[j+1][2]=k%10; /*个位*/
if(!(num[j+1][0]==num[j+1][1]||num[j+1][0]==num[j+1][2]||
num[j+1][1]==num[j+1][2])) /*若分解的三位数字均不相等*/
a[++j]=k; /*j:计数器,统计已找到的满足要求的三位数*/
}
for(i=1;i<=j-2;++i) /*从满足条件的三位数中选出三个进行组合*/ {
b[1]=num[i][0];
b[2]=num[i][1];
b[3]=num[i][2];
for(t=i+1;t<=j-1;++t)
{
b[4]=num[t][0]; /*取第t个数的三位数字*/
b[5]=num[t][1];
b[6]=num[t][2];
for(flag=0,m=1;!flag&&m<=3;m++) /*flag:出现数字重复的标记*/ for(n=4;!flag&&n<=6;n++) /*判断两个数的数字是否有重复*/
if(b[m]==b[n])flag=1; /*flag=1:数字有重复*/
1 2。