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.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;
}
No.2
- 回答日時:
本当に「標準関数のみ」にしちゃうと main も使えないので何もできない.
さておき, 何がわからない? どこまでできていて, どこで何に困っている? 自分で考えてる?
No.1
- 回答日時:
malloc関数は使用して良いのでしょうか。
試行回数は全データ数の半分未満という制約がありますが、
テーブルを複数作成すれば1発で完了も考えられます。
試行回数は全データ数の半分未満というのは、何か特定のテーブルに対してのことなのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 力学の問題 4 2022/10/11 21:55
- 物理学 電磁気学、TEMモードでマクスウェル方程式を満たさなくなる。 1 2022/07/19 23:58
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- 工学 製図です。 間違ってる点や付け加える点があれば教えてください 最近学び始めました https://d 1 2022/12/08 16:32
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# プログラミング実行後の表示される値を答えよ #include<stdio.h> void main( 7 2022/05/20 00:07
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- 登山・トレッキング この鳴き声の鳥を教えてください 1 2022/07/17 11:50
- C言語・C++・C# [至急] Project Euler: #15 Lattice paths コード、入力、出力、解説 1 2022/09/24 02:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがありま...
-
ウインドウの移動禁止
-
静的でないメンバ関数の呼び出...
-
bccでエラー:メンバー関数は呼...
-
C++にてtemplateで受け取った任...
-
クラス間でのクラスの共有?
-
(void)0 はどんな意味ですか
-
構造体を宣言と共に初期化する方法
-
関数ポインタについて
-
const_castのつかいどころを教...
-
【gcc・cygwin】multiple defin...
-
コンパイルエラー: LNK2001
-
pictureboxの画像を削除するには?
-
typedef unsigned int UINT;が...
-
C#を勉強中でC#で壁紙を変更す...
-
VC++でGetKeyboardStateがうま...
-
void*型の配列について
-
ifstreamについて
-
戻り値を返す関数の前に(void)...
-
C# KeyDownイベントでショート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがありま...
-
【gcc・cygwin】multiple defin...
-
戻り値を返す関数の前に(void)...
-
C++にてtemplateで受け取った任...
-
多重定義が起きている?--lnk20...
-
gcc: incompatible pointer type
-
静的でないメンバ関数の呼び出...
-
int main()、void main()、void...
-
Notepad++の関数リスト表示の変...
-
C# KeyDownイベントでショート...
-
C# Controls.Addで動的に配置し...
-
ArduinoでMouse関数を使用して...
-
(void)0 はどんな意味ですか
-
DLLの関数呼び出しで引数がある...
-
void*型の配列について
-
ウインドウの移動禁止
-
const_castのつかいどころを教...
-
VC++でGetKeyboardStateがうま...
-
C言語 プロトタイプ宣言
-
stddef.hって何?
おすすめ情報
標準関数のみ使用
(1) 配列データの作成
順位・番号・成績をまとめるため全てのデータを格納できる配列を用意すること.
はじめの段階では全データ数が分かっていないため,以下のように十分な配列を用意すること.
int b[1000][3]配列番号 を iとした場合, b[i][0]を順位, b[i][1]を番号, b[i][2]を成績とすると分かりやすい.
(2) 全データ数を数えるプログラム
総数を数えるためにはwhile文を用いてカウントを数えると良い. .-999は終了を表す値なので求めるのは 1個前の 94までとなる.