
C言語の問題集の回答がないので困っているので誰か教えてください。
私はまだ始めたばかりなので手におえません。
今私が理解しているif文、switch文、for文、while文、do-while文、配列、を
使用してでお願いします。
「カプレカの定理」をプログラムを使って考察しなさい.
今回は4桁の場合のプログラムを作成しばさい.
プログラムの仕様は以下のものとする.
4桁の入力がなされるまで,do-while文を用いてscanfを繰り返す.
int型の配列 digit[4] を用意し,それぞれに1~1000の位を割り当てる.
桁の分割方法は各自考えよ.
(例)
3175
digit[0] = 3
digit[1] = 1
digit[2] = 7
digit[3] = 5
配列 digit をバブルソートを用い昇順または降順に並べ,それを基に
最大の4桁と最小の4桁を算出する
実行結果例
Input -> 123
Input -> 12345
Input -> 1234 (*4桁の数が入力されるまで繰り返している。この括弧内は説明なので表示させる必要はない)
4321 - 1234 = 3087
8730 - 378 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
// Kaprekar.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdio.h"
#include "string.h"
static int digit[4];
// digit[]の2つの値を交換します
static void Swap(int i, int j)
{
int tmp = digit[i];
digit[i] = digit[j];
digit[j] = tmp;
}
// バブル・ソートを用いてdigit[]を昇順にソートします
static void SortAsc()
{
int i;
for (i = 0; i < 4; ++i)
{
int j;
for (j = 1; j < 4 - i; ++j)
{
if (digit[j] > digit[j - 1])
{
Swap(j, j - 1);
}
}
}
}
// バブル・ソートを用いてdigit[]を降順にソートします
static void SortDesc()
{
int i;
for (i = 0; i < 4; ++i)
{
int j;
for (j = 1; j < 4 - i; ++j)
{
if (digit[j] < digit[j - 1])
{
Swap(j, j - 1);
}
}
}
}
// digit[]を数値に直す
static int GetValue()
{
return (digit[0] - '0') * 1000 +
(digit[1] - '0') * 100 + (digit[2] - '0') * 10 + digit[3] - '0';
}
int main(int argc, char* argv[])
{
// 1000文字以上の入力はあり得ないという前提とする
char Input[1001];
char Text[5];
//4桁の入力がなされるまで,do-while文を用いてscanfを繰り返す.
do
{
printf("Input -> ");
scanf("%s", Input);
} while (strlen(Input) != 4);
// 対象となる数値の文字列表現を取得する
strncpy(Text, Input, 4);
Text[4] = '\0';
while (1)
{
static int OldV = 0;
int max, min, v, i;
// 文字列を並び替えてできる最大値を取得する
// 題意によりdigit[]配列に格納する必要がある
for (i = 0; i < 4; ++i)
{
digit[i] = Text[i];
}
SortAsc();
max = GetValue();
// 文字列を並び替えてできる最小値を取得する
// 題意によりdigit[]配列に格納する必要がある
for (i = 0; i < 4; ++i)
{
digit[i] = Text[i];
}
SortDesc();
min = GetValue();
v = max - min;
printf("%d - %d = %d\n", max, min, v);
sprintf(Text, "%04d", v);
// 同じ計算結果が2回続いたら終了
if (OldV == v)
{
return 0;
}
OldV = v;
}
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Ruby プログラミング 3 2023/06/09 14:30
- Java Java 南京錠 2 2023/02/04 11:46
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
if と配列の組み合わせ
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
数字列を3桁ごとにカンマで区切...
-
実数の整数部,小数部の取得
-
初項a_0=aとし、漸化式 a_n+1=(...
-
このプログラミング誰か教えて...
-
商と剰余を同時に求める(C言語)
-
system関数がうまくいかない
-
ColorをRGBで指定する方法
-
【C++】関数ポインタの使い方
-
構造体のすべての変数を文字列...
-
Win32APIで作るコンボボックス...
-
C 言語の Gauss Jordan 法について
-
C言語のポインタの問題の解答が...
-
(int *)の意味
-
線形補間 2次元テーブル C言語...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
read関数をノンブロッキングで...
-
(int *)の意味
-
ColorをRGBで指定する方法
-
std::set<int> で、ある値が何...
-
PowerShellがうまくいかない
-
int16_t の _t は何?
-
「{ } で囲むだけ」は正しい?
-
int型の変数値をバイト列として...
-
商と剰余を同時に求める(C言語)
-
return 1L
-
acceptをalarmでタイムアウトさ...
-
(マルチスレッド)_beginthrea...
おすすめ情報