部分和
C++でコード書く元気はなかったので、前授業で言っていた部分和の問題をCで書いてみた
#include<stdio.h> #define N 10 int k[5] = {1,2,3,4,5}; int s[5] = {0,0,0,0,0}; int jou(int i){ if(i == 0)return 1; return 2*jou(i-1); } int subsetsum(){ int i,ans = 0; int x =0; for(i = 0; i < 5;i++){ if(s[i] == 1){ ans += k[i]; x += jou(i); } } x++; for(i = 0;i<5;i++){ s[i] = x%2; x /= 2; } return ans; } int main(){ while(1){ if(N == subsetsum()){ printf("Yes\n"); break; } if(s[0]==s[1]==s[2]==s[3]==s[4]==1){ printf("no"); break; } } return 0; }
変数名とか考えるの面倒だったから適当。Nの値を変えてやれば他の値についても検証可能。scanfにするのがもっと手っ取り早いかな
さて、このコード、最初書いた時は60行以上あったけど今は確か50行未満。
これ以上短くするにはどうするか。タプルとか使えたら笑