[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nikomat:22428] Re: 返信:[Game]ana
ひうら@きょうだいっす。
さっき息抜き?に general version 作ったら、
こんなのが来た・・・急に改造。
再帰プログラムの教材にいかが?
#バグってたら、ごめんなさい。
> ひうら[22421]さん:
> > 乾さんのすばやさもさる事ながら、出題者、丹後屋さんの
> > 問題の良さもさすが。
> 誉められついでに悪乗り
>
> NIKON
> x F2
> ----------
> WELOVE
>
> '2' はそのまま 2 です。
> アルファベットの意味は前回と同じ。但し、どの文字も2と異なるとします。
E = 6, F = 1, I = 9, K = 0, L = 8, N = 3, O = 2, V = 7, W = 4,
E = 2, F = 1, I = 0, K = 4, L = 5, N = 6, O = 8, V = 3, W = 7,
E = 2, F = 0, I = 4, K = 3, L = 8, N = 6, O = 7, V = 5, W = 1,
E = 2, F = 0, I = 4, K = 8, L = 9, N = 6, O = 7, V = 5, W = 1,
E = 6, F = 1, I = 0, K = 4, L = 5, N = 8, O = 7, V = 3, W = 9,
E = 6, F = 0, I = 2, K = 3, L = 4, N = 8, O = 7, V = 5, W = 1,
E = 6, F = 0, I = 2, K = 7, L = 5, N = 8, O = 4, V = 9, W = 1,
E = 8, F = 0, I = 2, K = 3, L = 4, N = 9, O = 7, V = 5, W = 1,
E = 8, F = 0, I = 3, K = 6, L = 7, N = 9, O = 2, V = 5, W = 1,
の9通り。
検算はしてませんが・・
---- ---- ----
#include <stdio.h>
int buf[10];
int index[26];
/* char *txt[3] = {"NIKON", "F", "ILIKE"}; */
char *txt[3] = {"NIKON", "F2", "WELOVE"};
void check();
void loop(int pos, int end);
main() {
int i, j, ind;
int minBuf = 0;
for(i = 0; i < 26; i++) {
index[i] = -1;
}
for(j = 0; j < 3; j++) {
char *str = txt[j];
for(i = 0; str[i] != '\0'; i++) {
ind = str[i] - 'A';
if(str[i] < 'A' || 'Z' < str[i]) {
continue;
}
if(index[ind] != -1) {
continue;
}
index[ind] = minBuf;
minBuf++;
}
}
printf("number of characters = %d\n", minBuf);
loop(0, minBuf - 1);
}
void loop(int pos, int end) {
int i, j;
for(i = 0; i <= 9; i++) {
buf[pos] = i;
for(j = 0; j < pos; j++) {
if(buf[j] == i) {
goto CONT;
}
}
if(pos == end) {
check();
}
else {
loop(pos+1, end);
}
CONT:
;
}
}
void check() {
int i, j;
int val[3];
char *str;
for(j = 0; j < 3; j++) {
val[j] = 0;
str = txt[j];
for(i = 0; str[i] != '\0'; i++) {
if('0' <= str[i] && str[i] <= '9') {
val[j] = val[j] * 10 + str[i] - '0';
}
else {
val[j] = val[j] * 10 + buf[index[str[i] - 'A']];
}
}
}
if(val[0] * val[1] == val[2]) {
for(i = 0; i < 26; i++) {
if(index[i] != -1) {
printf("%c = %d, ", i+'A', buf[index[i]]);
}
}
printf("\n");
}
}