質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

7回答

814閲覧

編入試験過去の問題について

Ayaaya

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2020/04/18 07:55

編集2020/04/18 12:52

編入学勉強中の者です。過去問で
公園では、n人(1<=n<=100)の人がジョギングをした、それぞれの人は、時刻、t_s(1<=n<=500)にスタートし、時刻
t_e(1<=n<=500)に走るのを終えていた。この日、最も多くの人が走っている時間帯には、何人の人が同時に走っていたかを計算するプログラムc++言語または、c言語で作成せよ。ただし,n,t_s,t_eは標準入力から与えられるものとし、、例えば、C++言語では以下のような形で得られるものとする。必要なライブラリ等や標準入力のプログラムも記述すること。

#include<iostream> using namespace std; void main(){ int i; int t_s[100],t_e[100]; cin>>n; for(int i=0;i<n;i++){ cin>>t_s[i]; cin>>t_e[i]; } }**ボールドテキスト**

まず#include<iostream>,using namespace std;やsin>>の意味がよくわからずさらに、計算する方法が思いつきませんでした。
教えていただけないでしょうか。

#include <stdio.h> void main() { int i; int n; int t_s[100]; int t_e[100]; printf("何人走りましたか"); scanf_s("%d" ,&n); printf("走り始めと終わりのタイムを入力してください"); for (i = 0;i < n;i++) { printf("%d人目\n",i+1); scanf_s("%d" ,&t_s[i]); scanf_s("%d" ,&t_e[i]); } }

ボールドテキスト
自分の学んでいる言語はc言語です。
この後の計算がよくわかりませんでした。(質問内容が不十分ですみません。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/04/18 08:22

“sin>>”は“cin>>”の間違いです。
jimbe

2020/04/18 10:03

c++ は分からないと言うことのようですが, c は如何なのでしょうか. c が出来るとすれば, c で標準入力からのデータの取得部分だけても書いてみては如何でしょう. c も出来ないとなれば, 何の言語なら出来るでしょうか.
coco_bauer

2020/04/18 10:32

何か、自力で簡単なプログラムを書くことが出来るプログラミング言語を知っていますか? 質問者がCやC#を知らないのは判りましたが、何か知っているプログラミング言語があるなら、その言語と比較して理解を深めることができるかもしれません。
jimbe

2020/04/18 16:40 編集

> c++言語または、c言語で作成せよ なのですから, 無理に c++ でやらなくても良いのではないでしょうか. そして, 『公園では, 10人がジョギングをした. それぞれの人は8時以降に走り始め, 9時までに終えていた. この日, 最も多くの人が走っている時刻には, 何人の人が同時に走っていたか. (時刻は分単位で考えること)』 というのを机上で計算するとしたら, ayaaya さんならどのように求めるでしょうか.
guest

回答7

0

まず#include<iostream>,using namespace std;やsin>>の意味がよくわからず

このレベルでしたら、「本を一冊買う」あるいは「どこかスクールに入る」などして、体系的に学ぶことを優先すべき場面です。

投稿2020/04/18 08:02

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

さらに、計算する方法が思いつきませんでした。

逆です。計算する方法がわからなければ、どんなにプログラミング言語に習熟していたとしても計算するプログラムは書けません。プログラミング言語というのは、コンピュータに命令するやり方の規則ということでしかありません。何を命令すればいいのかわからなければ、いくら命令の仕方を知っていても無駄です。

まず、その問題を日本語で解いて下さい。数学(もしかして算数?)の問題です。プログラミングの話に持ち込むのはその後です。

投稿2020/04/18 13:02

thkana

総合スコア7629

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず、C++について勉強しましょう。

#include<iostream>

については江添亮のC++入門の“簡単な1つのソースファイルからなるプログラムの実行”あたりかな?
C++日本語リファレンスも参考にd^^

投稿2020/04/18 08:05

編集2020/04/18 08:19
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C++

1#include <iostream> 2#include <sstream> 3#include <algorithm> 4 5int main() { 6 using namespace std; 7 // 標準入力のかわり 8 istringstream stream("3 " 9 "100 130 " 10 "110 140 " 11 "120 150 "); 12 int slot[500]; // 時刻tに走っている人の数:slot[t] 13 fill(slot, slot+500, 0); // slotを0で埋める 14 int n; 15 stream >> n; 16 while ( n-- ) { 17 int t_s, t_e; 18 stream >> t_s >> t_e; 19 while ( t_s != t_e ) { // 走ってる時刻のslotを+1する 20 ++slot[t_s-1]; 21 ++t_s; 22 } 23 } 24 int max_val = *max_element(slot, slot+500); // 最大値を求め、 25 // 最大値であるslot# を出力する 26 for ( int i = 0; i < 500; ++i ) { 27 if ( slot[i] == max_val ) { 28 cout << "time slot[" << i+1 << "] " << max_val << "runners" << endl; 29 } 30 } 31}

投稿2020/04/18 11:19

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

n人の人を、開始時刻が早い順に並べ替えます。
現在人数のカウンタと、最大人数のカウンタを用意し、それぞれ0にセットします。
終了時刻のリストを用意します。
先頭の人から順に、以下を実行します。

その人の開始時刻と、リスト中の終了時刻一覧を比較します。終了時刻が先の人がいれば、現在人数のカウンタを減らし、その終了時刻をリストから抹消します。その後、その人の終了時刻をリストに加え、現在人数のカウンタを増やします。現在人数のカウンタが最大人数のカウンタを超えたら、最大人数のカウンタを増やします。

この日本語をC訳してください。

投稿2020/04/19 01:42

majiponi

総合スコア1720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2020/04/19 06:18

c は分かっても c++ は分からないという方にリストというのはちょっと難易度が高いのではないかと思います.
majiponi

2020/04/19 10:12

別に無理にリスト構造を使う必要はなくて、配列にして消すときに-1とか番兵で上書きすればいいし、そもそもCの教本にもリスト構造の説明はある(少なくとも私が読み耽った入門書には載ってた)。なければググればいい。工夫や調査をする能力を育てる機会を敢えて奪うのは、私としてはちょっと…。 ま、彼女のために検索のキーワードを書くなら、std::multisetってとこでしょうね。
guest

0

c++

1#include <iostream> 2using namespace std; 3 4const int N = 5; // 100 // 人数 5const int T = 10; // 500 // 時刻 6 7int solv(int n, int t_s[], int t_e[]) { 8 int max_t = 0; 9 int max_runner = 0; 10 for (int t = 1; t <= T; t++) { 11 int count_runner = 0; 12 for (int p = 0; p < n; p++) { 13 if ((t_s[p] <= t) && (t <= t_e[p])) { 14 count_runner++; 15 } 16 } 17 if (count_runner > max_runner) { 18 max_runner = count_runner; 19 max_t = t; 20 } 21 } 22 return max_runner; 23} 24 25int main(){ 26 int n; 27 int t_s[N],t_e[N]; 28 29 cout << "input n:" << endl; 30 cin >> n; 31 for(int i = 0; i < n; i++) { 32 cout << "input start and end:" << endl; 33 cin >> t_s[i]; 34 cin >> t_e[i]; 35 } 36 cout << "end of data" << endl; 37 int max_n = solv(n, t_s, t_e); 38 cout << max_n << endl; 39 return 0; 40}

投稿2020/04/19 00:28

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

構造体は使えますか?

C

1#include <stdio.h> 2#include <stdlib.h> // qsort 3 4struct Data { 5 int time; 6 int se; // start:1, end:-1 7}; 8 9int comp(const void *x, const void *y) 10{ 11 return ((struct Data *)x)->time - ((struct Data *)y)->time; 12} 13 14int main() 15{ 16 struct Data data[100 * 2]; 17 int n, k = 0; 18 scanf("%d", &n); 19 for (int i = 0; i < n; i++) { 20 scanf("%d%d", &data[k].time, &data[k+1].time); 21 data[k].se = 1, data[k+1].se = -1, k += 2; 22 } 23 qsort(data, k, sizeof *data, comp); 24 int m = 0, max = 0; 25 for (int i = 0; i < k; i++) 26 if ((m += data[i].se) > max) max = m; 27 printf("%d\n", max); 28}

入力
5
0 10
3 23
5 15
12 27
18 25

出力
3

時刻 0~3 は 1人
時刻 3~5 は 2人
時刻 5~10 は 3人
時刻 10~12 は 2人
時刻 12~15 は 3人
時刻 15~18 は 2人
時刻 18~23 は 3人
時刻 23~25 は 2人
時刻 25~27 は 1人

追記
バグがあったので、qsort に与える比較関数 comp を次のように訂正します。

C

1int comp(const void *x, const void *y) 2{ 3 int d = ((struct Data *)x)->time - ((struct Data *)y)->time; 4 return d ? d : ((struct Data *)x)->se - ((struct Data *)y)->se; 5}

どういうバグかというと、
2
10 20
20 30
このような入力があった場合、時刻20 において人が入れ替わるわけですが、
これを 2人が同時に走っていると解釈してしまうことがあるのです。
コードを見ればわかるように、この入力を data[] に
10 1
20 -1
20 1
30 -1
と取り込んだ後、ソートするのですが、qsort は安定ソートではないので
2つの同じ値 20 について、どちらが先になるかが決定していません。
10 1
20 1
20 -1
30 -1
となることがあるのです。安定ソートに変更しても、入力データが
ソートされているとは限りません。
そこで、今回の comp の変更になりました。

投稿2020/04/18 15:56

編集2020/04/19 03:30
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問