請計算如下問題: ABCD-EFGH =2016
其中ABCD和EFGH都代表一個4位數。其中每一個字母(A-H)都代表1-9其中一個數字,不同字母代表的數字不一樣。請計算出上式一共有多少種解法?例如:4613-2597=2016就是其中一種解法。
uj5u.com熱心網友回復:
#include <stdio.h>#define check(x) if(flag[x]) continue; else flag[x]++
int main() {
for ( int i=3017; i<9999; i++) {
int flag[10] = {0};
int a, b, c, d;
int t = i;
d = t%10; t/=10; check(d);
c = t%10; t/=10; check(c);
b = t%10; t/=10; check(b);
a = t; check(a);
t = i-2016;
int e,f,g,h;
h = t%10; t/=10; check(h);
g = t%10; t/=10; check(g);
f = t%10; t/=10; check(f);
e = t; check(e);
printf("%d-%d=2016\n", i, i-2016);
}
return 0;
}
3502-1486=2016
3508-1492=2016
3608-1592=2016
3705-1689=2016
3708-1692=2016
4603-2587=2016
4607-2591=2016
4613-2597=2016
4701-2685=2016
4705-2689=2016
5708-3692=2016
5710-3694=2016
5714-3698=2016
5810-3794=2016
5812-3796=2016
6203-4187=2016
6205-4189=2016
6301-4285=2016
6305-4289=2016
6307-4291=2016
7310-5294=2016
7314-5298=2016
7402-5386=2016
7408-5392=2016
7412-5396=2016
8307-6291=2016
8310-6294=2016
8407-6391=2016
8507-6491=2016
8513-6497=2016
9301-7285=2016
9401-7385=2016
9402-7386=2016
9502-7486=2016
uj5u.com熱心網友回復:
#include <stdio.h>int main() {
int nCount = 0;
for ( int i=3017; i<9999; i++) {
int flag[10] = {0};
int t = i*10000L + (i-2016);
int j=0, v=0;
for ( ; j<8; j++) {
v = t%10;
if(flag[v]) break; else flag[v]++;
t /= 10;
}
if ( j != 8 ) continue;
nCount ++;
printf("%d-%d=2016\n", i, i-2016);
}
printf("\nTotal:%d\n", nCount);
return 0;
}
uj5u.com熱心網友回復:
abcdefgh,為 1-9, 不可為0.
uj5u.com熱心網友回復:
#include<bits/stdc++.h>
using namespace std;
int n,r;
bool vis[30];
int a[30];
void pr(){
for(int i=1;i<=r;i++){
cout<<a[i];
if(i==4){
cout<<"-";
}
}
cout<<"=2016"<<endl;
}
void dfs(int x,int num){
if(num>r){
if(a[1]*1000+a[2]*100+a[3]*10+a[4]-a[5]*1000-a[6]*100-a[7]*10-a[8]==2016){
pr();
}
}
else{
for(int i=1;i<=n;i++){
if(!vis[i]){
vis[i]=1;
a[x]=i;
dfs(x+1,num+1);
vis[i]=0;
}
}
}
}
int main(){
scanf("%d%d",&n,&r);
dfs(1,1);
return 0;
}
就是一個排列組合
輸入 9 8
結果為
4613-2597=2016
5714-3698=2016
5812-3796=2016
7314-5298=2016
7412-5396=2016
8513-6497=2016
uj5u.com熱心網友回復:
不包含零,也很簡單,改一個地方就可以了for ( ; j<8; j++) {
v = t%10;
if ( 0 == v ) break;
if(flag[v]) break; else flag[v]++;
t /= 10;
}
答案是6個
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121051.html
標籤:C++ 語言
上一篇:新手求指導!!
下一篇:php為什么要用swoole?
