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

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

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

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

C++

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

Q&A

解決済

1回答

839閲覧

学生の配属研究室を決めるプログラム

sino_sv12

総合スコア11

C

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

C++

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

0グッド

0クリップ

投稿2019/07/01 16:46

#概要
・研究室の数をL、学生の数をL、各研究室への最大配属人数をN/L人(小数部切り上げ)とする。
・各学生は第1希望から第L希望まで、すべての研究室に重複なく希望順位をつけている。
・入力された学生の順に最大配属人数を満たしていない研究室のうち、最も上位に希望している研究室へ配属される。
#入力
・入力の1行目は研究室の数L、2行目は学生の数Nである。
・入力の3行目からN名の学生の希望順に1人1行ずつ入力される(入力された順に学生0学生N-1)
・各学生の希望研究室は、第1
第L希望の順に、スペースで区切って入力される。
・各研究室は、0L-1の整数で表される(研究室0研究室L-1)
#出力
・研究室0L-1の順に、配属された学生が1行ずつ出力される。
・1つの研究室に配属された学生が、番号の小さい順に、スペースで区切って出力される。
・各学生は0
N-1の整数で表される。
#入出力例イメージ説明
#説明図
イメージ説明

このプログラムをC、もしくはC++で作成したいのですが、やり方がわかりません。
回答して頂ければ幸いです。
よろしくお願いします。

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

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

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

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

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

otn

2019/07/01 16:53

漠然と聞かず、具体的に分からない点を聞いて下さい。
azuapricot

2019/07/02 01:44

課題に詰んで困ってるのはわかりますけど、学校の課題ならおとなしく先生のもとにパソコンとコードを持って質問にいってください。 なんのための学校なんでしょう。 少しは自分でやってみました? 自分で1ミリも書かずに他人のちからで課題提出して何になるんですかね
guest

回答1

0

ベストアンサー

こんにちは。

ちょっと気持ちに余裕があったので作ってみました。

C++

1#include <iostream> 2 3int main() 4{ 5 std::size_t L, N; 6 std::cin >> L >> N; 7 8 constexpr static std::size_t Ln=3; 9 constexpr static std::size_t Nn=3; 10 int Ls[L][Ln]; 11 for (std::size_t i=0; i < L; ++i) 12 for (std::size_t j=0; j < Ln; ++j) 13 Ls[i][j]=-1; 14 15 for (std::size_t i=0; i < N; ++i) 16 { 17 std::size_t desired[Nn]; 18 for (auto& d : desired) 19 std::cin >> d; 20 21 [&]() 22 { 23 for (std::size_t j=0; j < Nn; ++j) 24 { 25 for (std::size_t k=0; k < Ln; ++k) 26 { 27 if (Ls[desired[j]][k] < 0) 28 { 29 Ls[desired[j]][k]=i; 30 return; 31 } 32 } 33 } 34 }(); 35 } 36 37 for (std::size_t i=0; i < L; ++i) 38 { 39 for (std::size_t j=0; j < Ln; ++j) 40 { 41 if (Ls[i][j] < 0) 42 break; 43 std::cout << Ls[i][j] << " "; 44 } 45 std::cout << "\n"; 46 } 47}

wandbox

このまま提出したら、確実にツッコミが入りますのできちんと内容を理解することを強くお勧めします。

これはC++11のgccでないと通りませんが、これをC++03のgccでも通るように修正できれば「自力」で解いたと言ってもよいかと。
なお、 [&](){ ... }();の部分はラムダ式を定義して実行しています。ここを普通の関数に直すか、きちんと説明できるかしないときっと「落ちる」と思います。

あと、これは Ls の定義でVLAを使っているのでVisual Studioでは通らない筈です。gccなら一応通ります。

投稿2019/07/01 18:29

Chironian

総合スコア23272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問