首页 > 其他 > 详细

POJ 1350 Cabric Number Problem (6174问题)水题

时间:2014-03-29 20:13:25      阅读:501      评论:0      收藏:0      [点我收藏+]

【题意简述】:6174问题,就是输入一个四位数,将数字从大到小的排序结果,减去从小到大的排序结果,得到的结果再重复上述操作!直到得到的值是0,或者6174,便结束!(其中还有一些细小的叙述,参见题目。)

【思路】:没有难度,思路很好建立,最重要的是看懂题意,按照题意要求控制输入输出,我就栽在这里了,因为没有注意一定要输入四位,导致我一直OLE。

还有就是,在这里边有的语言知识就是sprintf,和printf不同之处就是printf是将内容输出至显示器,而sprintf是将内容输出到字符串中,sscanf同理,我就不再赘述,详细的可以看看语法书。

详见代码:


// 236K 0Ms
#include<iostream>
using namespace std;
#include<cstdio>
#include<cstring>

int a,b;

int get_next(int x) {
  	int n;
  	char s[10];
  	sprintf(s, "%d", x);
  	n = strlen(s);
  	//冒泡排序! 
  	for(int i = 0; i < n; i++)
    	for(int j = i+1; j < n; j++)
      		if(s[i] > s[j])
		    {
        		char t = s[i]; s[i] = s[j]; s[j] = t;
      		}
  	sscanf(s, "%d", &b);//将得到的结果转化为整型后储存在b中!
  	// 反转! 
  	for(int i = 0; i < n/2; i++)
  	{
    	char t = s[i]; s[i] = s[n-1-i]; s[n-1-i] = t;
  	}
  	sscanf(s, "%d", &a);
  	return a - b;
}


int main() {
	int n,t;
	int count;
	while(cin>>n)
	{
		if(n == -1) break;
		count = 1;
		cout<<"N="<<n<<":"<<endl;
		if(n%1111 == 0||n>9999||n<1000) //!!注意这里输入必须是4位,否则就会 OLE!! 
		{
			cout<<"No!!"<<endl;
			continue;
		}
		for(;;) {
    		t = get_next(n);
    		
    		cout<<a<<"-"<<b<<"="<<t<<endl;
    		
   			if(t == 6174||t == 0)
   			{
			   	cout<<"Ok!! "<<count<<" times"<<endl;
			   	break;
  			}

			count++;
			n = t;
  		}
	}
  	return 0;
}


POJ 1350 Cabric Number Problem (6174问题)水题,布布扣,bubuko.com

POJ 1350 Cabric Number Problem (6174问题)水题

原文:http://blog.csdn.net/u013749862/article/details/22476787

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!