3つ全部どうぞ
/***** (1)のプログラム *****/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
/*コインの枚数情報*/
struct CoinGroup
{
const int coin; /*コイン種別*/
int count; /*枚数(組み合わせ毎に書き換える)*/
};
static CoinGroup coinGroup[] =
{
{ 500, 0 },
{ 100, 0 },
{ 50, 0 },
{ 10, 0 },
{ 0, 0 },
};
void exchange( CoinGroup* group, int money )
{
int size = money / group->coin;
group->count = 0;
while( group->count <= size )
{
int amount = group->coin * group->count;
/*まだ小さい硬貨がある?*/
if( 0 < ( group + 1 )->coin )
{
/*次の硬貨で枚数の組み合わせを計算する*/
exchange( group + 1, money - amount );
}
/*最大枚数に達した?*/
if( !( money - amount ) )
{
/*これ以上小さい硬貨がない時は
全ての硬貨の枚数を出力する*/
if( 0 >= ( group + 1 )->coin )
{
CoinGroup* temp = coinGroup;
while( 0 < temp->coin )
{
printf( "[%d]%d\t", temp->coin, temp->count );
++temp;
}
printf( "\n" );
}
break;
}
++( group->count );
}
}
int main()
{
exchange( coinGroup, 1000 );
return 0;
}
/***** (2)のプログラム *****/
#include <stdio.h>
int main()
{
const char* str[] =
{
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine"
};
char buffer[ 64 ];
printf( "%d桁までの整数を入力してください:",
sizeof( buffer ) - 1 );
scanf( "%s", buffer );
for( char* ptr = buffer; '\0' != *ptr; ptr++ )
{
int ix = *ptr - '0';
if( 0 <= ix && 9 >= ix )
printf( "%s ", str[ ix ] );
}
return 0;
}
/***** (3)のプログラム *****/
#include <stdio.h>
#include <stdlib.h>
#define MAX_INPUT_COUNT 100
int main()
{
int count = 0;
int total = 0;
int min = 0;
int max = 0;
while( true )
{
/*数値以外が入力されたら抜けるように
-1で初期化しておく*/
int input = -1;
printf( "整数を入力してください(0~100):" );
scanf( "%d", &input );
/*0~100以外の値が入力されたら終了*/
if( 0 > input || 100 < input ) break;
/*最小値を記憶*/
if( !count || min > input ) min = input;
/*最大値を記憶*/
if( !count || max < input ) max = input;
/*総和を記憶*/
total += input;
/*個数を加算*/
++count;
}
printf( "個数 =%d\n", count );
if( 0 < count )
{
printf( "平均値=%.1f\n", ( double )total / count );
printf( "最大値=%d\n", max );
printf( "最小値=%d\n", min );
}
return 0;
}
お礼
回答ありがとうございました。 友人や先輩に聞いてなんとかできました。