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

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

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

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

C++

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

Q&A

2回答

4751閲覧

【C言語の質問です】A-Fの文字列をランダムに並べ替えるプログラムの作成について

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

C++

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

0グッド

0クリップ

投稿2016/02/26 09:35

編集2016/02/28 03:47

*たくさんの方よりご指摘をいただけてとてもありたいです。
引き続き、よろしくお願い致します。

C言語を勉強している初心者のものです。

今課題をいただき、その作成をしております。
先日提出(全18問)したのですが、大部分が間違っているので、
再度問題を見なおした上で提出してくれと言われてしまいました。

今回は課題なので、間違っている点を教えていただけませんでしたので、
客観的な視点が欲しく、今回ご相談させていただきました。

すいません、正直お話してしまうとこの問題の解決方法が見出だせて状況です。
色々なサイトを参考にしながら作成はしたのですが・・
解き方など、アドバンスいただけますと幸いです。
自身の見解としては、今回入力が不要なので、
A-Fをランダムで並べ替えようという認識でした。

【問題】
【A】【B】【C】【D】【E】【F】6枚のカードをランダムに並べ替えるプログラムを作成せよ。

例)ABCD → DCBA

【回答】

#include <stdio.h> #include <stdlib.h> #include <time.h> int main (void) { char strings[6]; int show_count; int i; srand( time( NULL ) ); show_count = 1; while( show_count != 0 ) { show_count--; for( i = 0; i < 6; i++ ) { strings[i] = 'A' + rand()%( 'F' - 'A' ); } strings[6] = 0; puts( strings ); } return 0; }

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

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

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

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

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

guest

回答2

0

まず中身がA, B, C, D, E, Fとなるカードのセット

C

1char cards[] = "ABCDEF";

を作って、それを乱数で2つチョイス、入れ替えを何回か繰り返して並べ替え、
みたいなのが題意じゃないかな、と思いました

投稿2016/02/26 10:16

WoodenHamlet

総合スコア306

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

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

退会済みユーザー

退会済みユーザー

2016/02/29 07:35

ご回答ありがとうございます。 おっしゃるとおり、カードセットを作ってからですね! 最初の一歩をご提示いただきありがとうございました!!
guest

0

今回の提出回答は、(ほかの問題のと違って)明確な間違いです。文字をシャッフルすべきところを文字をランダムに生成してしまっているので、例えばAが二回出てきたりします。

やり方のヒントからまず提示いたしますと、6枚のカードからなる未シャッフルの山というのを想定してください。そこからランダムに一枚づつ引いて、シャッフル済みの山に置いていくという操作をします。

さてその「山」をCプログラム的にどう表現しましょうかというのがこの課題になります。

Teratail内の検索で「シャッフル 仕切り」で引くと、ちょっと前にJavaで同じ課題に挑戦していた人の問答が見つかるはずです。

投稿2016/02/26 11:21

yuba

総合スコア5568

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

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

退会済みユーザー

退会済みユーザー

2016/02/26 11:28

ご回答ありがとうございます。 配列から1枚づつランダムに引き出していくイメージでしょうか。 >Teratail内の検索で「シャッフル 仕切り」で引くと、ちょっと前にJavaで同じ課題に挑>戦していた人の問答が見つかるはずです。 上記ありがとうございます。 こちらも参考にしてみます。 アドバンスありがとうございました!!
yuba

2016/02/26 11:30

配列から引き出すにしても、最初は6枚から一枚、次は5枚から一枚、と山が減っていきます。さあそれをどうプログラムに落としましょう。
退会済みユーザー

退会済みユーザー

2016/02/29 07:33

yubaさん ご回答ありがとうございます。 イメージはわかりました!! ですが、イメージをプログラムにするというのは難しいですね・・ 私のイメージでは、配列からランダムに1つずつ取ってきて、 それを並べるという感じなのですが、いかがでしょうか。
退会済みユーザー

退会済みユーザー

2016/02/29 07:33

majiponiさん ご回答ありがとうございます。 Fisher-Yatesってやり方があるんですね!! 早速見てみたいと思います。 ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問