• 1
  • 2
  • 3
  • 4
  • 5
  • 6

PAT 1019 数字黑洞 (20分)

1.自己写的代码(非常非常非常菜)

#include
#include
#include 
#include
using namespace std;
void jiangxu(int a[]) {
	for (int i = 0; i < 4; i++) {
		int temp = a[i];
		int max = i;
		for (int j = i+1; j < 4; j++) { if (a[j] > temp) {
				temp = a[j];
				max = j;
			}
		}
		swap(a[i], a[max]);
	}
}
void shengxu(int a[]) {
	for (int i = 0; i < 4; i++) {
		int temp = a[i];
		int max = i;
		for (int j = i + 1; j < 4; j++) {
			if (a[j] < temp) { temp = a[j]; max = j; } } swap(a[i], a[max]); } } int res(int a[],int b[]) { int rres = (a[0]-b[0]) * 1000 + (a[1] - b[1]) * 100 + (a[2] - b[2]) * 10 + a[3] - b[3]; return rres; } int main() { char n[5]; cin >> n;
	if (n[0] == n[1] && n[0] == n[2] && n[0] == n[3]) {
		cout << n<<" - "<<n<<" = "<<"0000";
		return 0;
	}
	if (n[1] == '\0') {
		n[3] = n[0];
		n[0] = '0'; n[1] = '0'; n[2] = '0';
	}
	if (n[2] == '\0') {
		n[3] = n[1];
		n[2] = n[0];
		n[0] = '0'; n[1] = '0'; 
	}
	if (n[3] == '\0'){
		n[3] = n[2];
		n[2] = n[1];
		n[1] = n[0]; n[0] = '0';
	}
	int jn[5],sn[5];
	for (int i = 0; i < 4; i++) {
		jn[i] = n[i] - '0';
		sn[i] = n[i] - '0';
	}
	if (n == "6174") {
		cout << "7641 - 1467 = 6174";
		return 0;
	}
	int result = 0;
	for (; result != 6174;) {
		jiangxu(jn);
		cout <<  jn[0]<<jn[1]<<jn[2]<<jn[3];
		cout << " - ";
		shengxu(sn);
		cout <<  sn[0] << sn[1] << sn[2] << sn[3];
		cout << " = ";
		result = res(jn, sn);
		if (result < 1000) { cout << '0'; }
		cout << result<<endl; jn[0] = result / 1000; if (result % 1000 >= 100) { jn[1] = result % 1000 / 100; }
		else { jn[1] = 0; } 
		if (result % 1000%100 >= 10) { jn[2] = result % 1000 % 100 / 10; }
		else { jn[2] = 0; }
		 jn[3] = result % 1000 % 100 % 10; 
		
		sn[0] = jn[0]; sn[1] = jn[1]; sn[2] = jn[2]; sn[3] = jn[3];
		
	}
	return 0;
}

搬运的代码

#include
#include
using namespace std;

bool cmp(int a, int b){
	return a > b; 
}

void to_array(int a,char b[])//数字转字符串数组
{
	for(int i=0;i<4;i++){
		b[i] = a % 10 +'0';
		a /= 10;
	}
}
int main()
{
	char num[5];
	int n;
	scanf("%d", &n);
	do{
		to_array(n, num);
		int max, min;
		
		sort( num, num+4 );
		sscanf( num, "%d", &min);//字符串转成了数字
		sort( num, num+4, cmp );
		sscanf( num, "%d", &max);
		printf("%04d - %04d = %04d\n", max, min, max-min);
		n = max-min;
	}while( n!=6174 && n!=0);
	
	return 0;
 } 
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注