「倍数の判定法」の編集履歴(バックアップ)一覧はこちら
倍数の判定法 - (2012/11/30 (金) 17:47:55) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
マスターオブ整数論 大学への数学
*問い9-1
有る4桁の数abcdを9倍するとdcbaになった。この数を求めよ。
#include<stdio.h>
int main(){
int base=1009;
for(int i=0;i<20;i++){
int t1=base+i;
int t2=t1*9;
int t3=0;
for(int i=0;i<4;i++){
t3*=10;
t3+=t2%10;
t2/=10;
}
if(t1==t3)printf("(%d %d)",t1,t1*9);
}
}
*問い9-2
1234の各桁並べ替えてできる整数のうち11で割り切れるものを答えよ。
#include<stdio.h>
int ans=0;
bool spents[5]={false,false,false,false,false};
int saiki(int mul,int n){
if(mul==0){
if(n%11==0){
ans++;
printf("%d ",n);
}
}else{
for(int i=1;i<=4;i++){
if(spents[i]==false){
spents[i]=true;
saiki(mul/10,n+mul*i);
spents[i]=false;
}
}
}
}
int main(){
saiki(1000,0);
printf("%d",ans);
}
マスターオブ整数論 大学への数学
*問い9-1
有る4桁の数abcdを9倍するとdcbaになった。この数を求めよ。
#include<stdio.h>
int main(){
int base=1009;
for(int i=0;i<20;i++){
int t1=base+i;
int t2=t1*9;
int t3=0;
for(int i=0;i<4;i++){
t3*=10;
t3+=t2%10;
t2/=10;
}
if(t1==t3)printf("(%d %d)",t1,t1*9);
}
}
*問い9-2
1234の各桁並べ替えてできる整数のうち11で割り切れるものを答えよ。
#include<stdio.h>
int ans=0;
bool spents[5]={false,false,false,false,false};
int saiki(int mul,int n){
if(mul==0){
if(n%11==0){
ans++;
printf("%d ",n);
}
}else{
for(int i=1;i<=4;i++){
if(spents[i]==false){
spents[i]=true;
saiki(mul/10,n+mul*i);
spents[i]=false;
}
}
}
}
int main(){
saiki(1000,0);
printf("%d",ans);
}
*問い9-4
各桁の数字が7か6だけからなり36の倍数となる数を求めよ。
幅優先探索してみたけどコードが膨らみまくる。
なんかもうちょっと賢い解法がありそう。
#include<stdio.h>
#include<map>
#include<string>
int main(){
std::map<std::string,int> memo,next;
std::map<std::string,int>::iterator it;
memo["66"]=66%36;
memo["76"]=76%36;
std::string ansStr="",str;
while(ansStr==""){
for(it=memo.begin();it!=memo.end();it++){
str=(*it).first;
int num=(*it).second;
num=(num+24)%36;
str="6"+str;
if(num==0&&(ansStr==""||ansStr>str)){
ansStr=str;
break;
}
next[str]=num;
str=(*it).first;
num=(*it).second;
str="7"+str;
num=(num+16)%36;
if(num==0&&(ansStr==""||ansStr>str)){
ansStr=str;
}
next[str]=num;
}
memo.clear();
memo.insert(next.begin(),next.end());
next.clear();
}
printf("%s",ansStr.c_str());
}