编者注:考题版权归属版权方,作答代码版权归属编者,请勿私自盗用。本代码仅供参考,还请各位读者不吝赐教。
编者注:考题版权归属版权方,作答代码版权归属编者,请勿私自盗用。本代码仅供参考,还请各位读者不吝赐教。
编者注:考题版权归属版权方,作答代码版权归属编者,请勿私自盗用。本代码仅供参考,还请各位读者不吝赐教。
数字等式游戏。将数字1-9填入下图,使得等式成立。 要求每个数字只能使用一次,且数字1不能穿在乘法和除法的一位数中,即排除乘数或除数是1的情况。
输入格式:
输入正整数n(n<=3)
输出格式:
输出前n个成立的等式。多个等式分行输出。
输入样例:
在这里给出一组输入。例如:
1
输出样例:
在这里给出相应的输出。例如:
12*4+376/8-95=0
参考代码
编者注:考题版权归属版权方,作答代码版权归属编者,请勿私自盗用。本代码仅供参考,还请各位读者不吝赐教。
编者注:考题版权归属版权方,作答代码版权归属编者,请勿私自盗用。本代码仅供参考,还请各位读者不吝赐教。
编者注:考题版权归属版权方,作答代码版权归属编者,请勿私自盗用。本代码仅供参考,还请各位读者不吝赐教。
#include <iostream>
#include <vector>
using namespace std;
int k =9;
int count = 0;
vector<int> result(k),visited(k+1);
void dfs(int i,int n)
{
if(i == k){
if ((result[0]*10+result[1])*result[2]+(100*result[3]+10*result[4]+result[5])/(double)(result[6])-(result[7]*10+result[8]) == 0)
{
if(count<n)
{cout << result[0]*10+result[1] << "*" << result[2] << "+" << 100*result[3]+10*result[4]+result[5] << "/" << result[6] << "-" <<result[7]*10+result[8]<< "=" << 0 << endl;
count++;
}
else{
return;
}
}
}
else{
for(int j = 1;j<=9;++j)
{
if(!visited[j]){
if((i == 2||i == 6)&&j == 1)
continue;//排除乘数或除数是1的情况
visited[j] = 1;
result[i] = j;
dfs(i+1,n);
visited[j] = 0;
}
}
}
}
int main()
{
int n;
cin>>n;
dfs(0,n);
}