問題
下の例のように偶数の場合にはその数だけ○.奇数の場合にはその数だけ×を出力するプログラムを作れ。また各行の左端には○もしくは×の個数も出力すること
例
1:×
3:×××
4:○○○○
4:○○○○
4:○○○○
5:××××××
8:○○○○○○○○
9:××××××××××
12:○○○○○○○○○○○○
15:×××××××××××××××
この問題についてなんですがバブルソートで昇順に並び変えるのは理解できるのですが数値を出力させ、かつ○×を出すのがよく分からなくて教えていただきたいです。
バブルソートを用いた問題
Re: バブルソートを用いた問題
では、そのときのコードを見せてください。たぶんちょっとした修正でうまくいくと思います。mogu2522 さんが書きました: バブルソートで昇順に並び変えるのは理解できる
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: バブルソートを用いた問題
#include<stdio.h>
main()
{
int num[10], i, j, k, temp, n = 10;
for (i = 0; i < 10; i++)
{
printf("整数値を入力せよ:");
scanf_s("%d", &num[i]);
}
for (j = 0; j < n - 1; j++)
{
for (k = 0; k < n - 1; k++)
{
if (num[k] > num[k + 1])
{
temp = num[k];
num[k] = num[k + 1];
num[k + 1] = temp;
}
if (num[k] % 2 == 0)
{
printf("%d:", num[k]);
for (i = 1; i <= num[k]; i++)
{
printf("〇");
}
printf("\n");
}
else
{
printf("%d:", num[k]);
for (i = 1; i <= num[k]; i++)
{
printf("×");
}
printf("\n");
}
}
}
Re: バブルソートを用いた問題
何でもかんでもmain()にぶち込まない方がよいと思います。
// 全面的に改変しました
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N (10)
void makeRandomNumber(int *a, int n)
{
int i;
for (i = 0; i < n; i++) {
a[i] = rand() % 20 + 1; // 1~20の乱数を発生
}
}
void sortArray(int *a, int n)
{
int i, j, t;
for (i = 0; i < n - 1; i++) {
for (j = i; j < n; j++) {
if (a[i] > a[j]) {
t = a[i], a[i] = a[j], a[j] = t;
}
}
}
}
void printResult(int *a, int n)
{
int i, j;
for (i = 0; i < n; i++) {
printf("%2d:", a[i]);
if (a[i] % 2 == 0) {
for (j = 0; j < a[i]; j++) {
putchar('o');
}
}
else {
for (j = 0; j < a[i]; j++) {
putchar('x');
}
}
putchar('\n');
}
}
int main(void)
{
int arr[N];
srand((unsigned) time(NULL));
makeRandomNumber(arr, N);
sortArray(arr, N);
printResult(arr, N);
return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: バブルソートを用いた問題
次のように 4行追加して、ソートと表示を分離しましょう。mogu2522 さんが書きました:ほとんどあってるんですが途中の過程も繰り返されてしまい原因がつかめないのでお願いします
#include <stdio.h>
int main()
{
int num[10], i, j, k, temp, n = 10;
for (i = 0; i < 10; i++)
{
printf("整数値を入力せよ:");
scanf_s("%d", &num[i]);
}
for (j = 0; j < n - 1; j++)
{
for (k = 0; k < n - 1; k++)
{
if (num[k] > num[k + 1])
{
temp = num[k];
num[k] = num[k + 1];
num[k + 1] = temp;
}
} // 追加
} // 追加
for (k = 0; k < n; k++) // 追加
{ // 追加
if (num[k] % 2 == 0)
{
printf("%d:", num[k]);
for (i = 1; i <= num[k]; i++)
{
printf("〇");
}
printf("\n");
}
else
{
printf("%d:", num[k]);
for (i = 1; i <= num[k]; i++)
{
printf("×");
}
printf("\n");
}
}
}