gawkで解いてみた

解いてみました。gawk
http://b.hatena.ne.jp/articles/201101/2261

問題1
1〜9のうち、1つの数字を除いた8個の数字があります。この中から2個の数字を選んでならべて、ことなる2けたの整数を作ると、2の倍数は21個、4の倍数は12個、7の倍数は8個作ることができました。このとき、最初に除いた数字を求めなさい。

BEGIN{
for(ans = 1;ans < 10;ans++){
count_2 = 0;count_4= 0;count_7 = 0;
for(i = 1;i < 10;i++){
if (i == ans){
continue;
}
for(j = 1;j < 10;j++){
#print "ans=",ans;
#print "i=",i;
#print "j =",j;
if(j == ans){
continue;
}
if(j == i){
continue;
}
if ((i * 10 + j) % 2 == 0){
count_2++;
}
if ((i * 10 + j) % 4 == 0){
count_4++;
}
if ((i * 10 + j) % 7 == 0){
count_7++;
}
if((count_2 == 21) && (count_4 == 12) && (count_7 == 8)){
print ans;
break;
}
}
}
}
}


問題3
3けたの整数のうち、次の条件を満たすものを「良い整数」とよぶことにします。

条件:3けたの整数を2つの整数に分けてその和を考えると、常にもとの整数の約数になっている。

(例)330は3と30に分けても、33と0に分けても和が330の約数になっています。このため、330は「良い整数」となります。ですが、702は7と02に分けた場合は約数になりますが、70と2に分けてしまうと約数になりません。よって、702は「良い整数」ではありません。

一の位が0でない「良い整数」を4個求めなさい。


BEGIN{
for(num= 101;num < 999;num++){
num1 = int(num / 10);
num2 = num % 10;
if(num2 == 0){
continue;
}
sum1 = num1 + num2;

num3 = int(num / 100);
num4 = num % 100;
sum2 = num3 + num4;

if((num % sum1 == 0) && (num % sum2 == 0)){
print num;
}
}
}

プログラミングにめちゃくちゃ時間かかった・・・
半日はかかったかな。
なんちゃってプログラマだからえーけど・・・