2

このプログラムでは、テレビチャンネルのユーザーからの入力を取得したいと思います。

int tv[] = {2, 4, 5, 6, 8};

そして、私はユーザーに彼らが望むテレビチャンネルを入力するように促したいのでscanf、テレビチャンネル4は配列になりindex [1]ます。スキャンしたテレビチャンネル(4)を、[1]の配列インデックスに等しい新しい変数に一致させるにはどうすればよいですか?

4

5 に答える 5

2

ユーザーからチャネル番号を読み取り、配列をループして、そのチャネル番号がある場所を見つけます。

于 2012-11-08T05:21:31.213 に答える
1

単純な線形検索を実行します。ここでは、要素(ここではチャネル番号)が配列内で順番に検索されます

int channelnumber,arrayindex;
printf("\n Enter the channel number");
scanf("%d",&channelnumber)
for(i=0;i<5;i++)
{
     if(tv[i]==channelnumber)
     {
        arrayindex=i;
        break;
     }
}
于 2012-11-08T05:24:52.767 に答える
1

簡単な方法は、何らかの検索アルゴリズムを使用して配列を検索することです。配列がHUGEの場合は、 mapと呼ばれる C++ コンテナーを確認することをお勧めします。マップを作成すると、O(1) で述べた関連付けを行うことができます。

于 2012-11-08T05:49:19.843 に答える
1

質問は検索の単純なケースだと思います。チャネルが順番どおりでない場合は、おそらく線形検索を実行できます。そうでない場合は、バイナリ検索ロジックを使用してチャネルを見つけることができます。どちらも望まない場合は、ハッシュの概念を利用してください。しかし、それは配列のサイズを大きくしますが、要素を非常に簡単に見つけるのに役立ちます.

あなたの質問に答えてくれることを願っています.....

于 2012-11-08T05:28:10.313 に答える
0

配列で毎回検索すると費用がかかる可能性があります(私の意見では、大きな配列がある場合)別の解決策は、正しいインデックスにマップする別の配列を持つことができることです

例えば、

int tv[] = {2, 4, 5, 6, 8};
int mapping[]={-1,-1,0,-1,1,2,3,-1,-1,4};
tv[mapping[channelNumber]]//getting the actual value

これには追加のスペースが必要ですが、パフォーマンスを向上させることができます

于 2012-11-08T05:54:50.850 に答える