40種類の大小比較

[戻る]
困っています 2005/02/09(水) 02:20:20
入力に40種類の11bitのデータが40個あったとしてその中から一番小さい値のみを出力す
るにはどうすれば一番簡単ですか?
if文かcase文でお願いします。

reshia [HomePage] 2005/02/09(水) 02:43:45
どういう形で11bitのデータが与えられるのかがわからない。
もし、要素数12の配列の1〜11にそれぞれ1桁目〜11桁目のビットの値を入れて、
その配列を要素数40の配列それぞれに持つとしたら、
int data[40][12];
と宣言しておいて、上位ビットの桁同士を比較していって、0がでてくれば1が入ってい
た配列は次回以降の比較では無視し、最後まで残ったものが最小値を示す。
-----------------------------------------------------------
int digit, n, i, kouho;
for (digit = 1; digit <= 11; digit++) {
    for (n = 0; n < 40; n++) {
        if (data[n][0] == -1) continue;
        if (data[n][digit] == 0) {
            break;
        }
    }
    if (n == 40) continue;

    // 候補の絞込み(のための処理)
    for (i = 0; i < n; i++) {
        data[i][0] = -1;
    }
    for (i = n+1; i < 40; i++) {
        if (data[i][0] == -1) continue;
        if (data[i][digit] == 1) {
            data[i][0] = -1;
            break;
        }
    }

    kouho = 0;
    for (i = 0; i < 40; i++) {
        if (data[i][0] != -1) {
            kouho++;
            if (kouho == 2) break;
        }
    }
    if (kouho = 1) break;
}
for (digit = 1; digit <= 11; digit++) {
    printf("%d", data[kouho][digit]);
}
printf("\n");
-----------------------------------------------------------
こんな感じですかね?
コンパイラ通してないし、ましてや実行もしていないので
間違ってたらすみません。

reshia [HomePage] 2005/02/09(水) 02:46:48
すみません、19行目の(内側の4つあるfor文のうち3番目のfor文にある)
break文、いりません。

reshia [HomePage] 2005/02/09(水) 02:48:16
うわ、まただ。
最初のfor文、11から1に目指してまわしてください。
for (digit = 11; digit >= 1; digit--)
です

BB 2005/02/09(水) 04:15:07
>どういう形で11bitのデータが与えられるのかがわからない。
同感。
unsigned short data[40] = {0,} ;
/* 11bitのデータをdataにいれる処理*/
unsigned short ans = 0xffff ;
for( i = 0 ; i< 40 ; i++ )
{
  if(data[i] < ans )
     ans = data[i] ;
}
return ans ;

PATIO 2005/02/09(水) 17:18:41
せめて自分で考えたとこまででもソースを公開すれば、
その辺の説明も少しは補完できたんではないかと思いますけれど。

よく全くわかりませんという質問がありますけれど、
本当に全くわからないのであれば、出題者に教えてもらいに行った方が良いと思いますよ。
出題者はそれまでの講義なんかで説明済みの内容から出しているつもりでしょうし、
その説明を聞いてもわからなかったのであれば、解らないから説明してくれと
聞きに行くべきだと思います。
解らないまま宿題にだけ答えても全く無意味です。
まあ、ここで回答をもらって内容をきちんと理解してから提出すると言うなら話は別ですが、
全く解りませんといっている時点で既に問題がある状態でしょうし、
その状態から提示されたソースの内容が本当の意味で理解できるのかも
怪しいような気がします。

古いスレッドには追加発言できません。