ビンゴの結果を整形表示
Posted feedbacks - C
混ざり具合は良くないですが(-_-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <stdio.h>
#include <stdlib.h>
static int cmp(const void *p1, const void *p2)
{
return (rand() % 2)?1:-1;
}
int *bingo(int num)
{
int i, n;
int *nums;
if(num <= 0) return NULL;
nums = (int*)malloc(sizeof(int) * num);
for(i=0; i<num; i++){
nums[i] = i + 1;
}
qsort(nums, num, sizeof(int), (int (*)(const void*, const void*))cmp);
return nums;
}
void bingo_print(int *nums, int n)
{
int i, j;
for(i=0; i<n; i=j){
for(j=i; j < n && (i == j || j % 10); j++)
printf("%2d ", j + 1);
printf("\n");
for(j=i; j < n && (i == j || j % 10); j++)
printf("%2d ", nums[j]);
printf("\n\n");
}
}
int main(int argc, char *argv[])
{
int n;
int *nums;
if(argc < 2) return EXIT_FAILURE;
n = atoi(argv[1]);
srand(time(NULL));
nums = bingo(n);
bingo_print(nums, n);
free(nums);
return EXIT_SUCCESS;
}
|
表示桁指定は * でできますが、表示桁の求め方を 2 種類用意しました。
1. libm をリンクして、log10 を使う方法
2. stderr を捨てて fprintf を使う方法
1. libm をリンクして、log10 を使う方法
2. stderr を捨てて fprintf を使う方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <stdio.h>
#include <time.h>
#include <stdlib.h>
//#include <math.h>
void bingo( int n ){
int tmp;
int i,j;
//int k = (int)log10( n )+1;
int k = fprintf(stderr, "%d",n);
int *deck = (int*)malloc(sizeof(int)*n);
for( i = 0; i < n; i++ )
deck[i] = i+1;
for( i = 0; i < n; i++ ){
j = rand() % (n-i);
tmp = deck[j];
deck[j] = deck[ n-i-1 ];
deck[ n-i-1 ] = tmp;
}
for( i = 0; i < n; i+=10){
for( j = i; j < i+10 && j < n; j++ )
printf("%*d ", k, j+1 );
printf("\n");
for( j = i; j < i+10 && j < n; j++ )
printf("%*d ", k, deck[j] );
printf("\n");
printf("\n");
}
free(deck);
}
int main ( void ){
srand(time(NULL));
bingo(9);
printf("\n");
bingo(23);
printf("\n");
return 0;
}
|



raynstard
#3403()
Rating1/1=1.00
「重複無し乱数」で作ったbingo関数の結果を下のように「何番目の乱数か」とセットにして10個ずつ折り返して表示するコードを書いてください。
[ reply ]