static int a[] = { 99,21,10,94,56,3,44,12,51,33,84,81,36,99,11,76,26,99,50,51,69,98,4,83,13,21,30,23,93,49,40,51,58,59,83,68,7,80,85,17,33,58,78,2,99,20,87,5,100,97,54,95,57,48,2,52,81,18,29,10,50,10,67,5,56,15,57,41,100,19,30,95,2,78,70,81,91,96,69,22,96,46,2,97,26,22,75,73,8,33,67,94,35,25,72,84,63,62,44,88,28,92,62,46,12,86,56,89,36,94,7,94,94,79,31,45,1,69,67,49,70,13,7,27,1,33,34,4,42,87,37,33,60,16,38,87,81,20,4,37,6,85,54,79,69,37,60,23,98,57,97,68,68,44,58,20,62,22,22,66,25,8,6,19,66,21,65,54,28,79,98,79,17,46,23,57,72,88,48,38,83,29,70,65,54,65,61,34,76,87,12,51,66,24,35,3,45,84,39,96,72,78,80,78,0,40,57,44,12,42,86,77,57,8,7,73,57,90,4,26,57,39,75,45,95,41,34,27,49,61,83,14,77,95,30,1,81,18,44,27,39,98,44,45,16,1,67,37,65,58,63,86,1,95,67,22,85,24,2,45,85,100,12,96,16,85,6,45,26,16,80,37,52,35,4,89,87,97,68,75,6,56,86,70,64,41,98,44,49,16,5,89,59,72,10,25,92,98,70,36,39,39,77,9,58,95,37,49,90,90,33,89,86,44,21,95,0,99,78,1,16,77,29,85,55,83,94,-999 };
↓問題です
https://drive.google.com/file/d/1-AvNNIoOZ8s9hK3 …
No.1
- 回答日時:
malloc関数は使用して良いのでしょうか。
試行回数は全データ数の半分未満という制約がありますが、
テーブルを複数作成すれば1発で完了も考えられます。
試行回数は全データ数の半分未満というのは、何か特定のテーブルに対してのことなのでしょうか。
No.2
- 回答日時:
本当に「標準関数のみ」にしちゃうと main も使えないので何もできない.
さておき, 何がわからない? どこまでできていて, どこで何に困っている? 自分で考えてる?
No.3ベストアンサー
- 回答日時:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct _DATA {
int num;
int id;
int score;
} DATA;
int cmpDescScore(const void* n1, const void* n2) {
if (((DATA*)n1)->score > ((DATA*)n2)->score) {
return -1;
} else if (((DATA*)n1)->score < ((DATA*)n2)->score) {
return 1;
} else {
return 0;
}
}
int main(void) {
static int a[] = { 99,21,10,94,56,3,44,12,51,33,84,81,36,99,11,76,26,99,50,51,69,98,4,83,13,21,30,23,93,49,40,51,58,59,83,68,7,80,85,17,33,58,78,2,99,20,87,5,100,97,54,95,57,48,2,52,81,18,29,10,50,10,67,5,56,15,57,41,100,19,30,95,2,78,70,81,91,96,69,22,96,46,2,97,26,22,75,73,8,33,67,94,35,25,72,84,63,62,44,88,28,92,62,46,12,86,56,89,36,94,7,94,94,79,31,45,1,69,67,49,70,13,7,27,1,33,34,4,42,87,37,33,60,16,38,87,81,20,4,37,6,85,54,79,69,37,60,23,98,57,97,68,68,44,58,20,62,22,22,66,25,8,6,19,66,21,65,54,28,79,98,79,17,46,23,57,72,88,48,38,83,29,70,65,54,65,61,34,76,87,12,51,66,24,35,3,45,84,39,96,72,78,80,78,0,40,57,44,12,42,86,77,57,8,7,73,57,90,4,26,57,39,75,45,95,41,34,27,49,61,83,14,77,95,30,1,81,18,44,27,39,98,44,45,16,1,67,37,65,58,63,86,1,95,67,22,85,24,2,45,85,100,12,96,16,85,6,45,26,16,80,37,52,35,4,89,87,97,68,75,6,56,86,70,64,41,98,44,49,16,5,89,59,72,10,25,92,98,70,36,39,39,77,9,58,95,37,49,90,90,33,89,86,44,21,95,0,99,78,1,16,77,29,85,55,83,94,-999 };
int n = sizeof(a)/sizeof(*a) - 1;
DATA data[n];
for (int i = 0; i < n; i++) {
data[i].id = i + 1;
data[i].score = a[i];
}
qsort(data, sizeof(data)/sizeof(*data), sizeof(DATA), cmpDescScore);
/* ここから① */
char s[5];
puts("上位何名までを確認しますか?(キーボードで入力)");
scanf("%4s%*[^\n]", s);
getchar();
int m = strtol(s, NULL, 10);
printf("成績上位%d位まで(全%d名中)\n順位\t番号\t成績\n", m, n);
int save = data[0].score;
int no = 1;
for(int i = 0; i < n; i++) {
no = (save == data[i].score ? no : i + 1);
data[i].num = no;
if (i < m) {
printf("%3d\t%3d\t%3d\n", data[i].num, data[i].id, data[i].score);
}
save = data[i].score;
}
/* ここから② */
puts("検索する順位を入力してください(キーボードで入力)");
scanf("%4s%*[^\n]", s);
getchar();
m = strtol(s, NULL, 10);
bool flag = false;
for (int i = 0; i < n; i++) {
if (m == data[i].num) {
flag = true;
break;
}
}
if (flag) {
printf("全%d中%d位の該当者は\n", n , m);
for (int i = 0; i < n; i++) {
if (m == data[i].num) {
printf("%d番\n", data[i].id);
}
}
} else {
/* ソート済みデータに対しては試行(ループ)回数は高々1回 */
/* (どういう検索を想定してるか仕様が不確定) */
puts("該当する順位は存在しません(検索回数1回)");
}
return EXIT_SUCCESS;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
静的でないメンバ関数の呼び出...
-
既定のコンストラクタがありま...
-
戻り値を返す関数の前に(void)...
-
多重定義が起きている?--lnk20...
-
メッセージマップ(ON_CONTROL_...
-
C++にてtemplateで受け取った任...
-
【gcc・cygwin】multiple defin...
-
C#でトーンカーブの作成
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
コールバックって・・・
-
C/C++でのScene管理について
-
C++ 静的クラスの役割が分からない
-
(void)0 はどんな意味ですか
-
C言語 プロトタイプ宣言
-
const_castのつかいどころを教...
-
SC_SIZEがわからない
-
ArduinoでMouse関数を使用して...
-
関数の戻り値がextern
-
H8 3664Fのプログラム
-
static constメンバ変数(配列)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【gcc・cygwin】multiple defin...
-
C++にてtemplateで受け取った任...
-
戻り値を返す関数の前に(void)...
-
静的でないメンバ関数の呼び出...
-
多重定義が起きている?--lnk20...
-
既定のコンストラクタがありま...
-
C# Controls.Addで動的に配置し...
-
int main()、void main()、void...
-
void*型の配列について
-
(void)0 はどんな意味ですか
-
gcc: incompatible pointer type
-
C# KeyDownイベントでショート...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
Notepad++の関数リスト表示の変...
-
コールバックって・・・
-
マルチメディアタイマーの使用方法
-
_beginthreadにて発生するコン...
-
C#でラジオボタンを設定に記録...
-
VC++でGetKeyboardStateがうま...
-
typedef unsigned int UINT;が...
おすすめ情報
標準関数のみ使用
(1) 配列データの作成
順位・番号・成績をまとめるため全てのデータを格納できる配列を用意すること.
はじめの段階では全データ数が分かっていないため,以下のように十分な配列を用意すること.
int b[1000][3]配列番号 を iとした場合, b[i][0]を順位, b[i][1]を番号, b[i][2]を成績とすると分かりやすい.
(2) 全データ数を数えるプログラム
総数を数えるためにはwhile文を用いてカウントを数えると良い. .-999は終了を表す値なので求めるのは 1個前の 94までとなる.