用字符串的方式写
#include<bits/stdc++.h>
using namespace std;
int s[10];//0-9出现的次数都初始化为0
bool check(int x,int y){
char a[10];
sprintf(a,"%d",x); //把数字转化为字符存入字符数组a中
string s1(a); //将字符数组a贴给s1
sprintf(a,"%d",y);
string s2(a);
s1 = s1 + s2; //s1=ABCDEFG
//1.判断有没有重复发数字
for(int i = 0;i<s1.length();i++){
int t = s1[i] - '0';
if(s[t])
return false;
s[t]++;
}
//2.求和 s3[0-3] = EGAB
int n=x+y;
sprintf(a,"%d",n);
string s3(a);
if(s3[0]==s1[4] && s3[1]==s1[6]&&
s3[2]==s1[0] && s3[3]==s1[1])
return true;
else return false;
}
int main(){
int i,j,ans=0;
for(i=1000;i<=9999;i++){
for(j=100;j<=999;j++){
memset(s,0,sizeof(s));
if(check(i,j)){
ans=i;
break;
}
}
if(ans)
break;
}
printf("%d",ans);
}
用数字进行判断
《一》
#include<bits/stdc++.h>
using namespace std;
int s[10];//0-9出现的次数都初始化为0
bool check(int i,int j){
int n=i+j;
int a[15],k=0;
//DCBA-0123
while(i){
int t = i % 10;
i /= 10;
if(s[t]){
return false;//有重复
}
s[t]++;
a[k++]=t;
}
//GFE-456
while(j){
int t = j % 10;
j /= 10;
if(s[t]){
return false;//有重复
}
s[t]++;
a[k++]=t;
}
int y=a[6]*1000+a[4]*100+a[3]*10+a[2];
if(n==y)
return true;
else return false;
}
int main(){
int i,j,ans=0;
for(i=1000;i<=9999;i++){
for(j=100;j<=999;j++){
memset(s,0,sizeof(s));
if(check(i,j)){
ans=i;
break;
}
}
if(ans)
break;
}
printf("%d",ans);
}
《二》
#include<bits/stdc++.h>
using namespace std;
int s[10];//0-9出现的次数都初始化为0
bool check(int i,int j){
int n=i+j;
int a[15],k=0;
//DCBA-0123
while(i){
int t = i % 10;
i /= 10;
if(s[t]){
return false;//有重复
}
s[t]++;
a[k++]=t;
}
//GFE-456
while(j){
int t = j % 10;
j /= 10;
if(s[t]){
return false;//有重复
}
s[t]++;
a[k++]=t;
}
//BAGE-78910
while(n){
int t = n % 10;
n /= 10;
a[k++]=t;
}
if(a[7]==a[2] && a[8] == a[3]
&& a[9] == a[4] && a[10] ==a[6])
return true;
else return false;
}
int main(){
int i,j,ans=0;
for(i=1000;i<=9999;i++){
for(j=100;j<=999;j++){
memset(s,0,sizeof(s));
if(check(i,j)){
ans=i;
break;
}
}
if(ans)
break;
}
printf("%d",ans);
}