首页 > 代码库 > 《编程之美》4.10数字哑谜和回文
《编程之美》4.10数字哑谜和回文
第一题:找出符合条件的九位数,每位数互不相同(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; }
《编程之美》4.10数字哑谜和回文
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。