問題はこちら
No.267 トランプソート - yukicoder
カードの種類が高々52なので、ソートするのではなく「どのカードがあるか」を記録して、前から順番に出力すれば良い
int main(){ int n,i,j,card[99][99]={}; char p,q,suit[]="DCHS",num[]="A23456789TJQK"; scanf("%d\n",&n); while(n--){ scanf("%c%c ",&p,&q); card[p][q]++; } for(i=0;i<4;i++)for(j=0;j<13;j++)if(card[suit[i]][num[j]])printf("%c%c ",suit[i],num[j]); return 0; }
とりあえず縮める
char*a="DCHSA23456789TJQK"; b[99][99],i,j; main(k){ for(gets(b);~scanf("%c%c ",&k,&j);b[k][j]++); //bは添字が小さいあたりは使わないのでgetsしても大丈夫 for(;j=i<4;i++)for(;++j<17;)b[a[i]][a[j]]&&printf("%c%c ",a[i],a[j]); }
RE… グローバル変数に0代入してればOKなんじゃなかったっけ…
まあとりあえずダメなら最後にexit(0);をつけることにして、for文圧縮
for(;j=i<4;i++)for(;++j<17;)b[a[i]][a[j]]&&printf("%c%c ",a[i],a[j]); for(;++j<18?b[a[i]][a[j]]&&printf("%c%c ",a[i],a[j]):(j=++i<5);); //iが1ずれるので、それにともなってaもずらして"*DCHSA23456789TJQK"とする
更に最初の文ともくっつけて
char*a="*DCHSA23456789TJQK"; b[99][99],i,j; main(k){for(gets(b);~scanf("%c%c ",&k,&j)?++b[k][j]:++j<18?b[a[i]][a[j]]&&printf("%c%c ",a[i],a[j]),1:(j=++i<5););}
こんどはREにならない
157B
16/06/16追記
b[a[i]][a[j]]&&printf("%c%c ",a[i],a[j]),1 !b[a[i]][a[j]]||printf("%c%c ",a[i],a[j])
1つにまとまったので前後を入れ替えるとカッコが減らせて更に2B縮む
char*a="*DCHSA23456789TJQK"; b[99][99],i,j; main(k){for(gets(b);~scanf("%c%c ",&k,&j)?++b[k][j]:++j>17?j=++i<5:!b[a[i]][a[j]]||printf("%c%c ",a[i],a[j]););}
さらによーく考えると、Nをgetsで読み飛ばす必要はない事がわかる
char*a="*DCHSA23456789TJQK"; b[99][99],i,j; main(k){for(;~scanf("%c%c ",&k,&j)?++b[k][j]:++j>17?j=++i<5:!b[a[i]][a[j]]||printf("%c%c ",a[i],a[j]););}
147B