首页 > 学院 > 开发设计 > 正文

poj1350

2019-11-10 20:32:44
字体:
来源:转载
供稿:网友

题目大意:

给一个4位数字组成的数,按照以下3步进行运算: (1)从大到小排列(2)从小到大排列(3)计算差值。。。重复上述过程,直到最后结果变成6174或者0

解题思路:

按照运算步骤模拟这个过程就可以啦

代码如下:

#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>int equal(int n){ int m=n/10,a=n%10; while(m!=0) { if((m%10)!=a) return 0; m=m/10; } return 1;}int wrong(int n){ int num[10],a; int i=0,m=n; while(m!=0) { num[i++]=m%10; m=m/10; } if(i>4||i<4||equal(n)) return 1; return 0;}int cmp(const void *a,const void *b){ return (*(int *)a-*(int *)b);}int most(int n){ int number; int num[10]={0}; int k=n,j,i=0; int sum=0; while(k!=0) { num[i++]=k%10; k=k/10; } number=i; qsort(num,number,sizeof(num[0]),cmp); for(j=i-1;j>=0;j--) { sum=sum*10+num[j]; } return sum;}int least(int n){ int num[10]={0}; int k=n,j,i=0; int sum=0; while(k!=0) { num[i++]=k%10; k=k/10; } qsort(num,i,sizeof(num[0]),cmp); for(j=0;j<=i-1;j++) { sum=sum*10+num[j]; } return sum;}int main(){ int n,m; int a,b,count; while(scanf("%d",&n)&&(n!=-1)) { PRintf("N=%d:/n",n); count=0; if(wrong(n)) { printf("No!!/n"); continue; } m=n; while(m!=0&&m!=6174) { b=most(m);a=least(m); m=b-a; printf("%d-%d=%d/n",b,a,m); count++; } printf("Ok!! %d times/n",count); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表