2008C †回答者:ねいむ ぱっと見難しそうで、始めはDからやろうと考えていたが、 それでもこれまでの人生で一番、打ってて楽しい(可笑しい?)と思ったソースコード。 #include <stdio.h> #include <string.h> bool replace(char* std_str, char* str, char* str2); void main() { int count; char std[80], edt[80]; FILE *in,*out; in=fopen("c_in.txt","r"); out=fopen("c_out.txt","w"); while(true) { fscanf(in, "%s", std); if(strncmp(std, ".", 1) == 0) break; count = 0; for(int i = 0; i < 27; i++) { strcpy(edt,std); while(true) { // pqr switch(i) { case 0: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "0")) continue; break; case 1: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "1")) continue; break; case 2: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "2")) continue; break; case 3: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "0")) continue; break; case 4: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "1")) continue; break; case 5: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "2")) continue; break; case 6: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "0")) continue; break; case 7: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "1")) continue; break; case 8: if(replace(edt, "P", "0")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "2")) continue; break; case 9: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "0")) continue; break; case 10: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "1")) continue; break; case 11: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "2")) continue; break; case 12: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "0")) continue; break; case 13: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "1")) continue; break; case 14: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "2")) continue; break; case 15: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "0")) continue; break; case 16: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "1")) continue; break; case 17: if(replace(edt, "P", "1")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "2")) continue; break; case 18: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "0")) continue; break; case 19: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "1")) continue; break; case 20: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "0")) continue; if(replace(edt, "R", "2")) continue; break; case 21: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "0")) continue; break; case 22: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "1")) continue; break; case 23: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "1")) continue; if(replace(edt, "R", "2")) continue; break; case 24: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "0")) continue; break; case 25: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "1")) continue; break; case 26: if(replace(edt, "P", "2")) continue; if(replace(edt, "Q", "2")) continue; if(replace(edt, "R", "2")) continue; break; } break; } while(true) { // - if(replace(edt, "-2", "0")) continue; if(replace(edt, "-1", "1")) continue; if(replace(edt, "-0", "2")) continue; // * if(replace(edt, "(0*0)", "0")) continue; if(replace(edt, "(0*1)", "0")) continue; if(replace(edt, "(0*2)", "0")) continue; if(replace(edt, "(1*0)", "0")) continue; if(replace(edt, "(1*1)", "1")) continue; if(replace(edt, "(1*2)", "1")) continue; if(replace(edt, "(2*0)", "0")) continue; if(replace(edt, "(2*1)", "1")) continue; if(replace(edt, "(2*2)", "2")) continue; // + if(replace(edt, "(0+0)", "0")) continue; if(replace(edt, "(0+1)", "1")) continue; if(replace(edt, "(0+2)", "2")) continue; if(replace(edt, "(1+0)", "1")) continue; if(replace(edt, "(1+1)", "1")) continue; if(replace(edt, "(1+2)", "2")) continue; if(replace(edt, "(2+0)", "2")) continue; if(replace(edt, "(2+1)", "2")) continue; if(replace(edt, "(2+2)", "2")) continue; break; } if(strcmp(edt, "2") == 0) count++; } fprintf(out, "%d\n", count); } fclose(in); fclose(out); } bool replace(char* std_str, char* str, char* str2) { char* index; char changed[80]; memset(changed, 0, sizeof(char) * 80); index = strstr(std_str, str); if(index > 0) { strncpy(changed, std_str, (long)(index - std_str)); strcat(changed, str2); strcat(changed, &index[strlen(str)]); strcpy(std_str, changed); return true; } return false; } 良い子は真似しないでね。 |