大学生程序代写

/*6174问题
时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数

比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4

输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数
输出
经过多少次上面描述的操作才能出现循环
样例输入
1
1234样例输出
4来源
[张洁烽]原创
上传者
张洁烽

*/
/*1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,
用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数rev(m),
得出数k1=m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去,卡普耶卡发现,
无论k0是多大的四位数,只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174
容易证明,对于任何自然数n>=2,连续做K变换必定要形成循环.这是因为由n个数字组成的数
只有有限个的缘故.但是对于n>=5,循环的个数以及循环的长度(指每个循环中所包含数的个数)
尚不清楚*/

#include<stdio.h>//自己的代码
#include<string.h>//6174问题
void  f(char a[],char d[]){
int  b,i,j;//函数功能:传一个字符串类型的数char a[],将char b[]
char c[10];//变为其最大数和最小的差值,即:a[]=3241,经过f(a,b)后,b[]=4321-1234=3087。。。
strcpy(c,a);
for(i=0;i<4;i++)//冒泡排序
for(j=i+1;j<4;j++)//必须先从大到小否则像3805这样的数就会出错
 if(c[i]<c[j]){//先求出最大
 b=c[j];
c[j]=c[i];
 c[i]=b;
 }strcpy(d,c);
 for(i=3,j=0;i>=0;i--)
c[i]=d[j++];
 
for(i=3;i>=0;i--){//最大减最小
if(d[i]-c[i]<0){
--d[i-1];
d[i]=d[i]+10-c[i]+'0';
}
else if(d[i]==c[i]) d[i]='0';
else      d[i]=d[i]-c[i]+'0';
}
}
int main (){
  int n,count;
 char m[10],p[10];
 scanf("%d",&n);
  while(n--){
     count=1;
scanf("%s",m);
        f(m,p);
      while(strcmp(m,p)){
             strcpy(m,p);
           c ount++;
            f(m,p);
}
printf("%d\n",count);
  }
return 0;
}
 
//他人代码,借鉴
01.  

02.#include<stdio.h>   
03.int
get_next(int
x){  
04.    char
s[10];  
05.    int
a,b,i,j,n;  
06.    n=sprintf(s,"%d",x);//把整型数转换为字符型。返回字符串长度。   
07.    for(i=0;i<n;i++)//冒泡法排序。   
08.        for(j=i+1;j<n;j++)  
09.            if(s[i]>s[j]){  
10.                char
t=s[i];  
11.                s[i]=s[j];  
12.                s[j]=t;  
13.            }  
14.    sscanf(s,"%d",&b);//把字符型转换为整型,并赋值给b   
15.    for(i=0;i<n/2;i++){//
翻转字符串。   
16.        char
t=s[i];  
17.        s[i]=s[n-i-1];  
18.        s[n-i-1]=t;  
19.    }  
20.    sscanf(s,"%d",&a);//把字符型的最大数赋值给a   
21.    return
a-b;  
22.}  
23.int
num[2000],count;  
24.int
main(){  
25.    int
m,found;  
26.    scanf("%d",&m);  
27.    while(m--){  
28.        count=1;  
29.        scanf("%d",&num[0]);  
30.            for(;;){  
31.        num[count]=get_next(num[count-1]);  
32.        found=0;  
33.        for(int
i=0;i<count;i++)  
34.            if(num[count]==num[i]){  
35.                found=1;  
36.                break;  
37.            }  
38.            if(found)  
39.                break;  
40.            count++;  
41.            
42.            }  
43.            printf("%d\n",count);  
44.        
45.    }  
46.return
0;
47.}  

 
 
 


 
     //优秀代码
#include<stdio.h>
int Test(int m)
{
     int c[4],j,k,temp,a,b;
     c[0]=m;
     c[1]=m/10;
     c[2]=m/100;
     c[3]=m/1000;
     for(j=0;j<3;++j)
        for(k=j+1;k<4;++k)//冒泡排序
        {
           if(c[j]<c[k])//大到小
           {
               temp=c[j];
               c[j]=c[k];
               c[k]=temp;
           }
        }
        a=1000*c[0]+100*c[1]+10*c[2]+c[3];
        b=1000*c[3]+100*c[2]+10*c[1]+c[0];
     return a-b;
}
int main()
{
  int n,m,i,cnt,c[4];
  scanf("%d",&n);
  for(i=0;i<n;++i)
  {
     cnt=1;
     scanf("%d",&m);

     while(m!=6174)
     {
       m=Test(m);
       cnt++;
     }
      printf("%d\n",cnt);
  }
   return 0;
}
作者:chao1983210400 发表于2013-7-14 16:11:14 原文链接
阅读:32 评论:0 查看评论

[原]NYOJ-6174问题-57的更多相关文章

  1. [原]NYOJ 括号匹配系列2,5

    本文出自:http://blog.csdn.net/svitter 括号匹配一:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号匹配二:htt ...

  2. NYOJ-214 单调递增子序列(二) TLE 分类: NYOJ 2014-01-28 22:57 171人阅读 评论(0) 收藏

    #include<stdio.h> #include<stdlib.h> #define max(x,y) x>y?x:y #define MAXX 100005 int ...

  3. NYOJ-949 哈利波特 AC 分类: NYOJ 2013-12-30 12:57 217人阅读 评论(0) 收藏

    #include<stdio.h> int main(){ long long a,b,c,d,e,f; while(scanf("%lld%lld%lld%lld%lld%ll ...

  4. DES原理及代码实现

    一.DES基础知识DES技术特点 DES是一种用56位密钥来加密64位数据的方法    DES采取了分组加密算法:明文和密文为64位分组长度    DES采取了对称算法:加密和解密除密钥编排不同外,使 ...

  5. NYOJ题目57 6174问题

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAscAAAJLCAIAAACE5qzaAAAgAElEQVR4nO3dMXKrutvH8XcT6bOQ1C ...

  6. NYOJ 57 6174问题

    6174问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替 ...

  7. nyoj 57

    6174问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替 ...

  8. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  9. 【荐1】Total Commander 7.57 个人使用设置 及 常用快捷键 备忘

    Total Commander 7.57a  下载地址:http://www.baidu.com/s?wd=total commander 7.57 破解版 软件整体预览图:(注意,下面的版本我用的是 ...

随机推荐

  1. iOS拓展:react-native创建工程的坑和解决方法

    正文 首先,在创建工程之前,你需要有环境.这个网上很多,不赘述. 我们直接从创建工程开始,一步步记叙这过程. 坑一 一.打开终端,cd到你放文件的位置(我放在桌面了): yuqideMacBook-A ...

  2. 记录-项目java项目框架搭建的一些问题(maven+spring+springmvc+mybatis)

    伴随着项目框架的落成后,本以为启动就能成功的,but.... 项目启动开始报错误1:java.lang.ClassNotFoundException: org.springframework.web. ...

  3. 九度OJ 1197:奇偶校验 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3590 解决:1511 题目描述: 输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3',输出:10110011). ...

  4. php自定义函数: 加密下载地址

    function getdownurl($downurl, $extime = "3600", $serverid = 1) { if (empty($downurl)) { re ...

  5. Python菜鸟之路:Python基础-生成器和迭代器、递归

    一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退. 1. 迭代器优点 对于无法随机访问的数据结构(比如set)而言, ...

  6. MediaRecorder实现微信、QQ、人人、易信等语音录制功能工具:MediaUtilAPI

    本文介绍使用MediaRecorder进行录制音频.录制视频学习,熟悉MediaRecorder执行流程,通过简单的Demo结合解释运行效果,最后封装MediaRecorder的API工具,实现常见比 ...

  7. git本地分支管理

    查看分支:git branch创建分支:git branch dev重命名分支:git branch -m dev dev1删除分支:git branch -d dev切换分支:git checkou ...

  8. MyBaits面试题

    原文地址 Mybatis技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用Mybatis的文章,所以,一些参数使用细节略掉了,我们的 ...

  9. Linux基础系列:常用命令(6)_nfs服务与nginx服务

    NFS介绍: NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统 ...

  10. 用Delphi模拟键盘输入

    在Windows大行其道的今天,windows界面程序受到广大用户的欢迎.对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制.有时,对于繁杂的,或重复性的操作,我们能否通过编制程序来代替手工输入, ...