| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 498 人关注过本帖, 1 人收藏
标题:死循环,没找到自己程序问题在哪里,求大神指导
只看楼主 加入收藏
上海之恋
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-2-18
结帖率:0
收藏(1)
已结贴  问题点数:8 回复次数:3 
死循环,没找到自己程序问题在哪里,求大神指导
题目描述:假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序输出变化过程。
比如输入1234执行顺序是1234->3087->8352->6174->6174


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define num 1100
int comp1(const void *_a, const void *_b)
{
    int *a=(int*)_a;
    int *b=(int*)_b;
    return *b-*a;
}
int comp2(const void *_a, const void *_b)
{
    int *a=(int*)_a;
    int *b=(int*)_b;
    return *a-*b;
}

void main(){
    int n,i=0,j,sum1=0,sum2=0,newNum,l=0,newNums[num],a[num],b[num],k,s=0;
    scanf("%d",&n);
    newNums[l++]=n;
    printf("%d",n);
while(s!=1){

while(n)
{
    a[i++]=n%10;
    n=n/10;
}

 for(j=0;j<i;j++)
     b[j]=a[j];


qsort(a,i,sizeof(int),comp2);
qsort(b,i,sizeof(int),comp1);


for(k=0;k<i;k++)
     sum1+=a[k]*int(pow(10,k));
for(k=0;k<i;k++)
     sum2+=b[k]*int(pow(10,k));

  newNum=sum1-sum2;

for(k=0;k<l;k++)
{
  if(newNums[k]==newNum)
      break;
}

  if(k<l)
  {
      printf("->%d",newNum);
      s=1;
  }
  else
  {
    printf("->%d",newNum);
    n=newNum;
    i=0;
    sum1=0;
    sum2=0;

  }

    }
}
搜索更多相关主题的帖子: return include 1234 
2013-01-31 18:25
上海之恋
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-2-18
收藏
得分:0 
2013-01-31 19:46
xiao40201950
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2013-1-23
收藏
得分:4 
不管变什么数很快就变6174  到6174就是死循环了
2013-01-31 23:06
firmthinking
Rank: 3Rank: 3
来 自:西南交通大学
等 级:论坛游侠
帖 子:43
专家分:115
注 册:2012-12-9
收藏
得分:4 
以下是引用上海之恋在2013-1-31 18:25:26的发言:
现在要你写一个程序输出变化过程。
正确的题目应该是这个吧。
现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4 。
下面是我编的一个,你参考一下。
程序代码:
#include<stdio.h>
int main()
{
  int i,k=0,s[4],*p=s;
  long a,b,*p1=&a,*p2=&b,sum,t;
  long fun2(int *p,long *p1,long *p2);
  void fun1(int *p);
  for(i=0;i<4;i++)
    scanf("%d",p+i);
  while(1)
  {
    fun1(p);
    sum=1000*s[0]+100*s[1]+10*s[2]+s[3];
    t=fun2(p,p1,p2);
    k++;
    if(t==sum)
    {
      printf("%ld\n",t);
      printf("the times k=%d\n",k);
      break;
    }
  }
  return 0;
}
long fun2(int *p,long *p1,long *p2)
{
  int i,j,t,s;
  long n;
  for(i=0;i<4;i++)
  for(j=0;j<3;j++)
  if(*(p+j)<*(p+j+1))
  {
    t=*(p+j);
    *(p+j)=*(p+j+1);
    *(p+j+1)=t;
  }
  *p1=1000*(*p)+100*(*(p+1))+10*(*(p+2))+*(p+3);
  *p2=1000*(*(p+3))+100*(*(p+2))+10*(*(p+1))+*p;
  s=*p1-*p2;
  n=s;
  for(i=3;i>=0;i--)
   {
    *(p+i)=s%10;
    s=s/10;
  }
  return n;
}
void fun1(int *p)
{
  int i;
  for(i=0;i<4;i++)
  printf("%d",*(p+i));
  printf("->");
}


2013-02-01 09:54
快速回复:死循环,没找到自己程序问题在哪里,求大神指导
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020198 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved