【アプリ版】サポートOS変更のお知らせ

Nは2以上とする。1からNまでの数字が一つずつ書かれたNマイのカードを1セットとして白色のセットAと黒色のセットBがあるセットAは昇順に並べ、セットBは、すべてのi(1<=i<=N)においてセットAのi番目の数字a[i]とセットBのi番目の数字b[i]が異なるとする。

#include <stdio.h>
#define N 4

int setb(int *idx,char *a,char *b){
int i;
for(i=0;i<N;i++){
b[i]='0'+idx[i-1];
if(a[i]==b[i]){return 0;}
}
return 1;
}

int main(void)
{
int i,;
int idx[N];
char a[N+2], b[N+2];
a[0] = b[0] = ' '; a[N+1]=b[N+1] = 0;

for(idx[0]=1;idx[0]<=N;idx[0]++){
for(idx[1]=1;idx[1]<=N;idx[1]++){
if(idx[0]==idx[1])continue;
for(idx[2]=1;idx[2]<=N;idx[2]++){

for(idx[3]=1;idx[3]<=N;idx[3]++){

if(setb(idx,a,b)) {printf("%s\n",b);}
}
}
}
}
return 0;
}

①と②に当てはまるコードを書け
実行した時の出力を書け

わかる方お願いいたします。

gooドクター

A 回答 (2件)

上の文章と下のプログラムにどんな関係があるんだろう.



まあ, どんな関係があるとしても
プログラムがおかしい
んだけど, さ.
    • good
    • 0

N=4として、


>1からNまでの数字が一つずつ書かれたNマイのカードを1セット
>セットAは昇順に並べ
より、Aは1234に特定される。
>すべてのi(1<=i<=N)においてセットAのi番目の数字a[i]とセットBのi番目の数字b[i]が異なる
より、Bは1~4の組み合わせで、Aと一致しない(例:2341,2413,…)を出力する
――ってことで良いのかな。
Cじゃなくて、Pythonとかrubyとか使ったほうが楽ですよ。

N=4;a=(1..N).to_a;a.permutation.to_a.each{|b| puts b.join('') unless [a,b].transpose.any?{|a,b|a==b}}
2143
2341
2413
3142
3412
3421
4123
4312
4321
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング