C/C++の宿題を片付けます 108代目

このエントリーをはてなブックマークに追加
753デフォルトの名無しさん
>>751
#include<stdio.h>
int resolve_sub(int total, int num, int min) {
static int ans[9], anslen = 0;
int i, j;
if(!num)
return !total;
for(i = min; i <= 9 && i <= total; i ++) {
ans[anslen ++] = i;
if(resolve_sub(total - i, num - 1, i + 1)) {
for(j = 0; j < anslen ; j ++)
printf("%d ", ans[j]);
printf("\n");
}
anslen --;
}
return 0;
}
void resolve(int total, int num) {
resolve_sub(total, num, 1);
}
int main() {
resolve(30, 6); /* (例)30を6個の和に分ける */
return 0;
}
754デフォルトの名無しさん:2008/06/06(金) 02:25:34
#include <stdio.h>
void f(int size, int n, int *p)
{
static int pos = 0, start = 1;
int i;
if(pos==size-1) {
p[pos] = n;
for(i=0; i<size; i++) printf("%d ", p[i]);
putchar('\n');
return;
}
for(i=start; i*2<n; i++) {
start = i + 1;
p[pos++] = i;
f(size, n-i, p);
pos--;
}
}
int main(void)
{
int num, amount, *p;
printf("要素数を入力して下さい:");
scanf("%d", &num);
printf("合計数を入力して下さい:");
scanf("%d", &amount);
p = malloc(sizeof(int) * num);
f(num, amount, p);
return 0;
}
755デフォルトの名無しさん:2008/06/06(金) 02:34:17
問題読み違えた。
1から45まで限定で1から9しか使っちゃダメなのか。
756デフォルトの名無しさん:2008/06/06(金) 02:50:08
>>751
#include<stdio.h>
int O00O(int OOO0){
if(OOO0%2) return OOO0/2*(OOO0+1);
return (OOO0+1)/2*OOO0;
}
void OOOO(int O0OO[], int OOO0, int OO0O, int OO00, int O0000){
int O, O000;
if(OO00<=1){
O0OO[OO00]=OOO0;
for(O=1;O<OO0O;O++) printf("%d+", O0OO[O]);
printf("%d\n", O0OO[OO0O]);
return;
}
O000=(OOO0-O00O(OO00-1)-1)/OO00;
for(O=O0000;O<=O000;O++){
O0OO[OO00]=O;
OOOO(O0OO, OOO0-O, OO0O, OO00-1, O+1);
}
}
void O0O0(int OOO0, int OO0O){
int O0OO[1000];
if(OO0O>=sizeof(O0OO)/sizeof(O0OO[0])) return;
OOOO(O0OO, OOO0, OO0O, OO0O, 1);
}
int main(void){
O0O0(100, 10);
return 0;
}