海外旅行から帰ってきたら、まず何を食べる?

考え方が分からず困っています。プログラミングを0からある程度まで4日で終わらせる講座で悪戦苦闘しています。以下のような課題が出て、必死で考えているのですが分かりません。考え方のヒントを
頂ければと思っています。他力本願と思われるかもしれませんが、本当に困ってしまっているのでどなたかよろしくお願い致します。


下記のプログラムにおいて,numcountは,値が0 ~M -1 の範囲の大きさN のint型の配列を引数として渡されると(ただし,M, N は正の整数),同じ値が複数ある時はそれを1 個とみなしてその配列中の数の個数を返す関数である.例えば,配列の値を7, 4, 8, 2, 4, 6, 1, 6, 4, 5 とすると,(ダブリを省くと) この中には,7, 4, 8,2, 6, 1, 5 の7 個があるので,関数numcountは7 を返す.
これは,例えば,0 ~M -1 の範囲でどんな数が出てきたかをチェックしておき(ヒント: 大きさM のint型の配列を用い,最初はすべて0に初期化しておき,数iが現れたら,そのi番目を1にすればよい),
最後に1度でも出てきたものを数えれば求めることができる.関数numcountを,下記のプログラムの/* INSERT HERE */の部分に挿入できるように書け.(提出はプログラム全体)

#include <stdio.h>
#define M 10 /* 適当な正整数(数の範囲が0 ~M -1) */
#define N 10 /* 適当な正整数(入力する数の個数)*/
/* INSERT HERE */
int main(void)
{
int i, a[N];
/* a[0]~a[N-1] の値を入力する*/
for(i= 0; i< N; i++) {
printf("a[%1d] = ? ", i);
scanf("%d", &a[i]);
}
printf("numcount= %3d¥n", numcount(a));
return 0;
}

A 回答 (2件)

bool num[N];



//memsetでやってもいいけれど
for(int i = 0;i < N;i++){
num[i] = false;
}

int numcount(int a[N]){
//数の個数=0
int number = 0;
//引数を最初から最後まで調べる
for(int i = 0;i < N;i++){
//もしnum[]に登録されていなければ
if(num[a[i]] == false){
//登録する&数の個数を1増やす
num[a[i]] = true;
number++;
}
}
return number;
}
読みにくなったうえ、下手なプログラムですみません。
馬鹿正直に書くとおそらくこうなります。
    • good
    • 0

間違っていたらすいません。



例えば数字が4,3,7,6,5,4,2と与えられたら、
a[4]=1;
a[3]=1;
a[7]=1;
・・・・
みたいにしていき1の数を数えれば良いのでは?
ダブリの数が出ても、さらに1を代入するだけです。
    • good
    • 0

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