進捗状況のビルドは、ちょうど、生成機能を話すについてのブログを読んでどのような書き込み何か自分に消化するために、今話して良い感じ。
ブログのアドレス
題する例HDU OJの為替問題に
(当時の勧告を見てとは...これで、このブログの外観を解決し、または読むことはありません)
問題の説明
わずか1分、2分、国のコインで3分、お金は様々な方法に対して、N個のコインに変換します。法律に違反がいくつあるかを計算するようにプログラムしてください。
入力
ライン毎にN未満32,768であり、nは整数正です。
出力
各入力および出力のための交換方法の数に対応します。
入力サンプル
2934 12553
サンプル出力
718 831 13137761
#include <stdio.h>
#include <stdlib.h>
//HDU OJ 钱币兑换问题
int main()
{
//需要创建一个数组,该数组的下标就是x的次数,对应的值就是x对应次数的系数
int c[1000000];
//然后是一个需要存储中间操作的数组
int temp[1000000];
int i,j,k;
//然后在这题中,先对一分的这个赋系数的初值,全是一(从x0 到x1000000),而存储中间操作的数组全变成0
for(i=0;i<1000000;i++){
c[i]=1;
temp[i]=0;
}
//然后就要开始前一项和后一项相乘了,然后把相乘的值存在第一项中,因为这个问题只涉及三项,所以就是i从2到三
for(i=2;i<=3;i++){
for(j=0;j<1000000;j++){//这个就是第一项,代表的是x0 x1 x2 x3... j代表的就是对应系数
for(k=0;k+j<=1000000;k+=i){//这个就是第二项,本题的第二项就是 x0 x2 x4.。。k代表的是对应系数
//k+j的意思也就是(j1+j2)*(k1+k2)=j1*k1+j1*k2+j2*k1+j2*k2 这样子的 而j和k是次数 ,两项相乘等于次数相加
temp[k+j]+=c[i];
}
}
//再把中间操作的值放到最终目的地
for(j=0;j<1000000;j++){
c[i]=temp[i];
temp[i]=0;
}
}
int n;//输入需要的硬币数
scanf("%d",&n);
printf("%d\n",c[n]);
return 0;
}
このようなトピックもエントリにいくつかの質問を見て多くの労力を必要とします!