Each input file contains one test case which gives a positive integer N in the range (0, 10000).
If all the 4 digits of N are the same, print in one line the equation "N - N = 0000". Else print each step of calculation in a line until 6174
comes out as the difference. All the numbers must be printed as 4-digit numbers.
6767
7766 - 6677 = 1089<br/>9810 - 0189 = 9621<br/>9621 - 1269 = 8352<br/>8532 - 2358 = 6174
首先判是否为1111,我之前就是因为没有判断是1111而超时 然后进行最大排序处理 最小排序处理 最后循环到6174程序结束 import java.util.*;
public class Main {
public static void main(String[] args) { Scanner in=new Scanner(System.in); int num=in.nextInt(); int [] n=new int[4]; if (isSame(num)) { System.out.println(num +" - "+ num + " = 0000"); } else { for (; ; ) { array(n, num); Arrays.sort(n); num = add(n); zero(add(n)); System.out.print(num + " - "); invertUsingFor(n); num -= add(n); zero(add(n)); System.out.print(add(n) + " = "); zero(num); System.out.println(num); if (num == 6174) { break; } } } } public static void invertUsingFor(int [] digits) { int t = digits[0]; digits[0] = digits[3]; digits[3] = t; t = digits[1]; digits[1] = digits[2]; digits[2] = t; } public static void array(int []n,int num) { for (int i = 0; num!=0; i++) { n[i] = num % 10; num /= 10; } } public static int add(int []n) { int temp=0; for (int i = 3; i >= 0; i--) { temp*=10; temp+=n[i]; } return temp; } public static void zero(int n) { if(n<10) { System.out.print("000"); } else if(n>10&&n<100) { System.out.print("00"); } else if(n>100&&n<1000) { System.out.print("0"); } } public static boolean isSame(int num) { int a1 = num / 1000; int a2 = num % 1000 / 100; int a3 = num % 100 / 10; int a4 = num % 10; if (a1 == a2 && a1 == a3 && a1 == a4) return true; return false; }
}
#include <iostream> #include <memory.h> #include <algorithm> using namespace std; inline int char2int(char* str) { int num = str[0] - '0'; num *= 10; num += str[1] - '0'; num *= 10; num += str[2] - '0'; return num * 10 + str[3] - '0'; } inline void int2char(int num, char* str) { str[3] = num % 10 + '0'; num /= 10; str[2] = num % 10 + '0'; num /= 10; str[1] = num % 10 + '0'; str[0] = num / 10 + '0'; } inline bool decrease(char a, char b) { return a > b; } int main(int argc, const char* argv[]) { ios::sync_with_stdio(false); char str[5], sortStr[5]; str[4] = sortStr[4] = '\0'; int num; cin >> num; int2char(num, str); if (!(num % 1111)) { cout << num << " - " << num << " = 0000"; return 0; } while (num - 6174) { memcpy(sortStr, str, 4); sort(str, str + 4, decrease); num = char2int(str); sort(sortStr, sortStr + 4); int sortNum = char2int(sortStr); cout << str << " - " << sortStr << " = "; num -= sortNum; int2char(num, str); cout << str << endl; } //system("pause"); return 0; }
#include<iostream> #include<algorithm> using namespace std; int main(){ int x,y,z; cin>>x; int a[4]; if(x==6174) x=1674; while(x!=6174){ a[0]=x/1000;a[1]=x/100%10;a[2]=x/10%10;a[3]=x%10; sort(a,a+4); if(a[0]==a[3]){ printf("%04d - %04d = 0000",x,x); return 0; } y=a[3]*1000+a[2]*100+a[1]*10+a[0]; z=a[0]*1000+a[1]*100+a[2]*10+a[3]; x=y-z; printf("%04d - %04d = %04d\n",y,z,x); } }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); char[] numbers=buling(in.nextInt()).toCharArray(); Arrays.sort(numbers); int result=getMax(numbers)-getMin(numbers); if(result!=0){ System.out.println(buling(getMax(numbers))+" - "+buling(getMin(numbers))+" = "+buling(result)); } while(result!=6174){ if(result==0){ System.out.println(getMax(numbers)+" - "+getMin(numbers)+" = 0000"); break; } char[] tempChar=buling(result).toCharArray(); Arrays.sort(tempChar); result=getMax(tempChar)-getMin(tempChar); System.out.println(buling(getMax(tempChar))+" - "+buling(getMin(tempChar))+" = "+result); } } public static String buling(int number){ String temp=String.valueOf(number); int size=temp.length(); if(size<4){ for(int i=0;i<4-size;i++){ temp="0"+temp; } } return temp; } public static int getMin(char[] numbers){ String result=""; for(int i=0;i<numbers.length;i++){ result+=numbers[i]; } return Integer.valueOf(result); } public static int getMax(char[] numbers){ String result=""; for(int i=numbers.length-1;i>=0;i--){ result+=numbers[i]; } return Integer.valueOf(result); } }
print '%04d - %04d = %04d'% (big, small, num)
#include <iostream> #include <algorithm> using namespace std; bool cmp(int a,int b){ return a>b; } int changenum(int s[]){ int n=0; for(int i=0;i<4;i++) n=n*10+s[i]; return n; } void toarray(int n,int s[]){ for(int i=0;i<4;i++){ s[i]=n%10; n/=10; } } int main(){ int n,a,b,s[5]; cin>>n; while(n!=0 && n!=6174){ toarray(n,s); sort(s,s+4); a=changenum(s); sort(s,s+4,cmp); b=changenum(s); n=a-b; printf("%04d - %04d = %04d\n",a,b,n); } return 0; }
import sys n_str = input().strip() n = int(n_str) if n == 0: print("0000 - 0000 = 0000") exit(0) if len(n_str) == 4: if n_str[0] == n_str[1] == n_str[2] == n_str[3]: print("{:04} - {:04} = 0000".format(int(n), int(n))) exit(0) k = int(n_str) if k == 6174: print('7641 - 1467 = 6174') while k != 6174 and k > 0: lst = list(str(k)) if len(lst) < 4: for i in range(4-len(lst)): lst.append('0') l1 = sorted(lst, reverse=True) l2 = sorted(lst) a, b = int("".join(l1)), int("".join(l2)) k = a-b print('{:04} - {:04} = {:04}'.format(a, b, k))
#include <stdio.h> int main() { int num,arr[4],i,j,tmp,inc=0,dec=0,n; scanf("%d",&num); while(dec-inc!=6174) { tmp=num; for(i=0;i<4;i++) { arr[i]=tmp%10; tmp=tmp/10; } for(i=0;i<3;i++) { for(j=i+1;j<4;j++) { if(arr[i]>arr[j]) { n=arr[i]; arr[i]=arr[j]; arr[j]=n; } } } inc=arr[0]*1000+arr[1]*100+arr[2]*10+arr[3]; dec=arr[3]*1000+arr[2]*100+arr[1]*10+arr[0]; if(dec==inc) { printf("%04d - %04d = %04d\n",dec,inc,dec-inc); break; } else { printf("%04d - %04d = %04d\n",dec,inc,dec-inc); } num=dec-inc; } return 0; }
#include<iostream> (720)#include<vector> #include<algorithm> (831)#include <string> using namespace std; int non_dec(string n) { vector<int>tmp; int sizes = n.size(); while (sizes < 4) { n = "0" + n; sizes++; } sort(n.begin(), n.end()); return (n[0]-'0')*1000+ (n[1] - '0') *100+ (n[2] - '0') *10+ (n[3] - '0'); } int non_inc(string n) { vector<int>tmp; int sizes = n.size(); while (sizes < 4) { n = "0" + n; sizes++; } sort(n.begin(), n.end()); return (n[3] - '0') * 1000 + (n[2] - '0') * 100 + (n[1] - '0') * 10 + (n[0] - '0'); } int main() { string n; cin >> n; if (n == "0"||(non_inc(n)== non_dec(n))) { printf("%04d - %04d = 0000",non_inc(n), non_inc(n)); } else { while (n != "6174"){ int N1 = non_inc(n); int N2 = non_dec(n); printf("%04d - %04d = %04d\n", N1, N2, N1 - N2); n = to_string(N1 - N2); } } }
nlst,boo = [],True n = input() n = int(n) n = "%04d"%nwhile True: for i in n: nlst.append(i) n1,n2 = '','' nlst.sort() for i in nlst: n1+=i nlst.reverse() for i in nlst: n2+=i if n1==n2: boo = False print(n1+" - "+n1+" = 0000") break else: n = "%04d"%(int(n2)-int(n1)) if boo: print(n2+" - "+n1+" = "+n) nlst = [] if n=='6174': break
分成了几个函数来写,看起来很简单。
# include <cstdio>
# include <cstdlib>
int m, n;
int digits[4];
void int2digs(int num) {
for (int i = 0; i < 4; i++) {
digits[i] = num % 10;
num /= 10;
}
}
int compar(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
void reverseDigs() {
int t = digits[0];
digits[0] = digits[3];
digits[3] = t;
t = digits[1];
digits[1] = digits[2];
digits[2] = t;
}
int digs2int() { //digits[0][1][2][3]
int num = 0;
for (int i = 0; i < 4; i++) {
num = num * 10 + digits[i];
}
return num;
}
int main() {
scanf("%d", &m);
n = -9999;
while (1) {
int2digs(m);
qsort(digits, 4, sizeof(int), compar);
n = digs2int();
reverseDigs();
m = digs2int();
printf("%04d - %04d = %04d\n", m, n, m - n);
m -= n;
if (m == 6174 || m == 0) {
break;
}
}
return 0;
}
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
try (java.util.Scanner input = new java.util.Scanner(System.in)) {
int N = input.nextInt();
boolean isEachDigitSame = true;
int a = N / 10;
int b = N % 10;
for (int i = 0; i < 3; i++) {
if (a % 10 == b) {
a = a / 10;
} else {
isEachDigitSame = false;
}
}
if (isEachDigitSame) {
System.out.printf("%04d - %04d = %04d", N, N, 0);
return;
}
while (true) {
int nonIncrNum = sort(N, "DECR");
int nonDecrNum = sort(N, "INCR");
int result = nonIncrNum - nonDecrNum;
if (result == 6174) {
System.out.printf("%04d - %04d = %04d", nonIncrNum, nonDecrNum, result);
break;
} else {
System.out.printf("%04d - %04d = %04d\n", nonIncrNum, nonDecrNum, result);
N = result;
}
}
}
}
// 排序
public static int sort(int num, String order) {
// 将 num 转成 Integer 数组
Integer[] numArray = new Integer[4];
for (int i = 3; i >= 0; i--) {
numArray[i] = num % 10;
num = num / 10;
}
// 排序
if ("INCR".equals(order)) {
Arrays.sort(numArray, (i1, i2) -> i1 > i2 ? 1 : -1);
} else if ("DECR".equals(order)) {
Arrays.sort(numArray, (i1, i2) -> i1 > i2 ? -1 : 1);
}
// 将数组转换成整数
int sortedNum = 0;
for (Integer i : numArray) {
sortedNum = sortedNum * 10 + i;
}
return sortedNum;
}
}
20分。 #include "iostream" #include "vector" #include "string" #include "cstring" #include "cstdio" #include "queue" #include "stack" #include "map" #include "ctime" #include <limits.h> #include <algorithm> using namespace std; bool cmp(char s, char s2) { return s > s2; } int main() { int resultNum; cin >> resultNum; string temp; int std = 1000, tempNum = resultNum; string s; for (int i = 0; i < 4; ++i) { s.push_back((tempNum / std + '0')); tempNum = tempNum % std; std /= 10; } string _increaseString = s, _decreaseString = s; sort(_increaseString.begin(), _increaseString.end()); sort(_decreaseString.begin(), _decreaseString.end(), cmp); while (resultNum != 0 && resultNum != 6174) { sort(_increaseString.begin(), _increaseString.end()); sort(_decreaseString.begin(), _decreaseString.end(), cmp); resultNum = stoi(_decreaseString) - stoi(_increaseString); string temp; int std=1000 ,tempNum = resultNum; for (int i = 0; i < 4; i++) { temp.push_back((tempNum / std + '0')); tempNum = tempNum % std; std /= 10; } cout << _decreaseString << " - " << _increaseString << " = " << temp << '\n'; _increaseString = temp; _decreaseString = temp; } }
// 1069.cpp : 定义控制台应用程序的入口点。 // #include <cstdio> #include <iostream> #include <vector> #include <cstring> #include <string> #include <algorithm> #include <queue> #include <map> #include <set> #include <deque> #include <cmath> #include <cstdlib> #include <functional> using namespace std; char num[5]; int main() { int diff; scanf("%d", &diff); do { sprintf(num, "%04d", diff); sort(num, num + 4, greater<int>()); int n1 = 0; for (int i = 0; i < 4; i++) n1 = 10 * n1 + num[i] - '0'; sort(num, num + 4); int n2 = 0; for (int i = 0; i < 4; i++) n2 = 10 * n2 + num[i] - '0'; diff = n1 - n2; printf("%04d - %04d = %04d\n", n1, n2, diff); } while (diff != 6174 && diff != 0); return 0; }