c语言实现6174数字黑洞

题目描述

任意一个每位数字不完全相同的 4 位正整数,将各位上数字重新组合成一个最大数和一个最小数相减,重复这个过程,必定得到 6174.

输入描述

有多组测试数据,每组测试数据占一行.

每行输入一个 44 位正整数.

输出描述

占一行,最终得到 61746174 的变换次数.

样例输入

Copy to Clipboard
1234
1000
6174

样例输出

Copy to Clipboard
3
5
0

头一次看到这个题目我是一脸蒙圈的状态啊,啥玩意,找规律吗?然后我就在纸上试着找了找规律,发现循环次数太多了,懒得继续算下去了,还是顺着题目的要求去实现对应的代码吧。

思路

  • 这肯定要有一个循环结构,如果结果不是6174就继续循环,然后还要设置一个数来记录循环次数
  • 数组总归不是一个数,所以重新排列组合的最大数和最小数肯定要设置成int型的max和min,还要设置一个差值final
  • 因为需要计算的数一定是四位数,所以数组就设为a[4]好啦
  • 把输入的整型数一个一个放到数组里面
  • 然后设计一个函数把数组中的数字按照从小到大的顺序排序,设一个void insert(int a[],int num)来实现这个操作

代码实现

#include <stdio.h>
void insert(int a[], int num) 
{
	int i,j,temp;
	for(i=0;i<num;i++)
		for(j=i+1;j<num;j++)
			if(a[i]>a[j])
			{
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
}
 
int main() {
  int n, count, final, s;
  int a[4];
  int max, min;
  while(scanf("%d", &n)!=EOF)
  {
  count = 0; final = 0;
  s = n;
  while (final != 6174&&n!=6174) {
    a[0] = s % 10;
    a[1] = s / 10 % 10;
    a[2] = s / 100 % 10;
    a[3] = s / 1000;
    insert(a, 4);
    max = 1000 * a[3] + 100 * a[2] + 10 * a[1] + a[0];
    min = 1000 * a[0] + 100 * a[1] + 10 * a[2] + a[3];
    final = max - min;
    count++;
    s = final;
  }
  printf("%d\n",count);
  }
  return 0;
}
以上内容并非独立完成,有些步骤借鉴了网络
  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值