第一题:找出符合条件的九位数,每位数互不相同(1~9的某个排列),满足高n位能被n整除。例如abcdefghi,高两位ab能被2整除,高三位abc能被3整除,以此类推。
相对简单的一种解法
#include "stdafx.h"
#include <iostream>
using namespace std;
void findNum(bool* used,int index,long sum)
{
if(index !=0 && sum%index != 0)
{
return;
}
else
{
if(index==9)
{
cout<<"The number is "<<sum<<" ."<<endl;
return;
}
}
for(int i=1;i<=9;i++)
{
if(used[i]==false)
{
used[i]=true;
findNum(used,index+1,sum*10+i);
used[i]=false;
}
}
return;
}
int main()
{
bool used[10]={false};
int index=0;
long sum=0;
findNum(used,index,sum);
system("pause");
return 0;
}
第二题:人过大佛寺*我=寺佛大过人
code
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;
int findPalindrome(int sum)
{
vector<int> s;
int temp=sum;
while(temp!=0)
{
int a=temp%10;
s.push_back(a);
temp=temp/10;
}
temp=0;
vector<int>::iterator it=s.begin();
while(it!=s.end())
{
temp=temp*10+*it;
it++;
}
return temp;
}
void findNum(bool* used,int index,long sum)
{
if(index==5)
{
int temp=findPalindrome(sum);
for(int i=1;i<=9;i++)
{
if(used[i]==false)
{
if(sum*i==temp)
{
cout<<sum<<" * "<<i<<" = "<<temp<<endl;
return;
}
}
}
return;
}
for(int i=1;i<=9;i++)
{
if(used[i]==false)
{
used[i]=true;
findNum(used,index+1,sum*10+i);
used[i]=false;
}
}
return;
}
int main()
{
bool used[10]={false};
int index=0;
long sum=0;
findNum(used,index,sum);
system("pause");
return 0;
}