[1.2] どのように取り組んだか(プログラムコードがある場合記載)
#include<stdio.h>
#define N 328
void main(void) {
int i, input, rank, num, count,n;
int* b[N];
static int a[N] = { 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 };
printf_s("検索する順位を入力してください\n");
scanf_s("%d", &rank);
printf_s("全327人中%d位の該当者は\n",rank);
//番号づけ
for (int i = 0; i < rank; i++)
{
b[i] = &a[0];
for (int j = 0; j < i; j++)
{
for (int* p = a; *p != -999; p++)
{
if (b[j] != p)
b[i] = p;
}
}
//同じ値を格納しないように
for (int* p = a; *p != -999; ++p)
{
if (*b[i] < *p) {
int dabli = 0;
for (int j = 0; j < i; ++j)
{
if (b[j] == p)
dabli = 1;
}
if (!dabli)
b[i] = p;
}
}
}
//降順ソート
rank = 1;
for (int i = 0; i < rank; i++)
{
if (i != 0 && *b[i - 1] != *b[i])
rank = i + 1;
}
}
大学の課題の問題文です。
上記のデータの中から入力した順位になる番号を検索し,試行回数(検索に要したループ数),データが何番目かを求めるプログラムを作成せよ.また,どの場合でも試行回数は全データ数の半分未満にし,見つからない場合でも結果を表示させること.
<stdio.h>のみだそうです。
またヒントとして二分探索法を用いるみたいなことが書いてありました。
完成すると例えばscanf_sで1を入力したとき
↓
ー----------------
検索する順位を入力してください
1
全327人中1位の該当者は
49番
69番
262番
ー----------------
該当する順位がないとき(今回は2)
ー----------------
検索する順位を入力してください
2
該当する順位は存在しません(検索回数8回)
ー----------------
となるそうです
[2] 環境
[2.1] OS : windous
[3] その他
・どの程度C言語を理解しているか
簡単な文字を出力させる程度で、あとはテキストなどをみてやっていてあまり、理解はできていないです。