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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
比較回数と交換回数表示について
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 配列と関数の練習問題
-
c言語
-
std::set<int> で、ある値が何...
-
卒業研究でよく分からないとこ...
-
C言語 エラーの原因がわからな...
-
DLLをGetProcAddress()で実行で...
-
【C++】関数ポインタの使い方
-
read関数をノンブロッキングで...
-
C言語における対称行列の作り方...
-
構造体の勉強中です 合計点の高...
-
C言語です。
-
C言語での引数の省略方法
-
困ってます…nCrを求めるC言語...
-
C++でvectorにテキストファイル...
-
プログラミング
-
素数 再帰関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 配列と関数の練習問題
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
c言語
-
足して100になるような乱数のア...
-
C言語初心者です、、、お助けく...
-
数字列を3桁ごとにカンマで区切...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
課題でつまってます・・・
-
商と剰余を同時に求める(C言語)
-
C言語の配列をC++のvectorに高...
-
std::set<int> で、ある値が何...
おすすめ情報