蓝桥杯练手之 大小之差
2015-11-08 13:24
162 查看
某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。
该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。
比如:766431 - 134667 = 631764 就是具有这样特征的数字。
你还能找到另一个这样的6位数吗?
请填写它重新排列数位后得到的最大数:________________
我在这里做一下补充说明:
切回正题
该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。
比如:766431 - 134667 = 631764 就是具有这样特征的数字。
你还能找到另一个这样的6位数吗?
请填写它重新排列数位后得到的最大数:________________
我在这里做一下补充说明:
srand((int)time(NULL));设定随机数种子 rand()%100;产生0-99的随机数。高级点的,假如要产生16-59之间的数,你可以这样写:rand()%44+16(这里44由59-16+1得到)。其他情况如法炮制!
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { srand(time(0)); for(int i=0;i<10;i++) printf("%3d",rand()%100+1); printf("\n"); return 0; } //生成10个1-100的随机整数。
切回正题
直接上代码!
#include<stdio.h> #include<time.h> #include<stdlib.h> #define max 5 int sort(int d[]) {//排序函数 int i,j,k; for (i=0;i<max;i++) for (j=0;j<max-i;j++) { if (d[j]<d[j+1]) { k=d[j+1]; d[j+1]=d[j]; d[j]=k; } } return 0; } int main() { srand(time(0)); int flag,i,j,k,a[6],b[6],c[6]; int w,m,n; flag=1; while(flag){ m=n=0; for(i=0;i<=max;i++) a[i]=rand()%9+1; sort(a); for(i=0;i<=max;i++) { b[i]=a[5-i]; } for(i=0;i<=max;i++) { m=m*10+a[i]; } for(i=0;i<=max;i++) { n=n*10+b[i]; } k=m-n; for(i=0;i<=max;i++) { c[i]=k%10; k=k/10; } sort(c); w=0; for(i=0;i<=max;i++) { if(a[i]==c[i]) { w++; if(w==6) flag=0; } } if(!flag) printf("%d",m); } return 0; }