1085.c
/*15Ms
用的是标记数组的办法,不是模拟数组乘法!!!
*/
#include<stdio.h>
#define MAX 10001 // 注意,一定要大于最大值 , max + 1
int a[MAX];
int main()
{
int i, j, k, num_1, num_2, num_5;
while (scanf("%d%d%d",&num_1,&num_2,&num_5)&&(num_5||num_2||num_1))
{
for (i=0; i<MAX; i++) //初始化数组a
{
a[i] = 0;
}
for (j=0; j <= num_1; j++)//若有num_1的值为n,则一次可以取0,1,2,……,n个num_1,所以num_1有n+1中取法
for (k=0; k+j <= num_1+2*num_2; k=k+2)//数组标记,处理2分的硬币
a[k+j]++;
for (j=0; j <= num_1+2*num_2&&a[j]; j++)
for (k=0; k+j <= num_1+2*num_2+5*num_5; k+=5)//5分的硬币
a[k+j]++;
for (i=0; i <= 5*num_5+2*num_2+num_1+1; i++)
{
if (a[i]==0)
{
printf("%d\n",i);// a保存最终结果
break;
}
}
}
return 0;
}
用的是标记数组的办法,不是模拟数组乘法!!!
*/
#include<stdio.h>
#define MAX 10001 // 注意,一定要大于最大值 , max + 1
int a[MAX];
int main()
{
int i, j, k, num_1, num_2, num_5;
while (scanf("%d%d%d",&num_1,&num_2,&num_5)&&(num_5||num_2||num_1))
{
for (i=0; i<MAX; i++) //初始化数组a
{
a[i] = 0;
}
for (j=0; j <= num_1; j++)//若有num_1的值为n,则一次可以取0,1,2,……,n个num_1,所以num_1有n+1中取法
for (k=0; k+j <= num_1+2*num_2; k=k+2)//数组标记,处理2分的硬币
a[k+j]++;
for (j=0; j <= num_1+2*num_2&&a[j]; j++)
for (k=0; k+j <= num_1+2*num_2+5*num_5; k+=5)//5分的硬币
a[k+j]++;
for (i=0; i <= 5*num_5+2*num_2+num_1+1; i++)
{
if (a[i]==0)
{
printf("%d\n",i);// a保存最终结果
break;
}
}
}
return 0;
}
1085_1.c
//0Ms
#include<stdio.h>
int main()
{
int num_1,num_2,num_5,res;
while(scanf("%d%d%d",&num_1,&num_2,&num_5)&&(num_1||num_2||num_5))
{
res=5*num_5+2*num_2+num_1;
if(num_1==0) res=0;
if(num_2==0&&num_1<4) res=num_1;
if(num_1==1&&num_2==1) res=3;
printf("%d\n",res+1);
}
return 0;
}
#include<stdio.h>
int main()
{
int num_1,num_2,num_5,res;
while(scanf("%d%d%d",&num_1,&num_2,&num_5)&&(num_1||num_2||num_5))
{
res=5*num_5+2*num_2+num_1;
if(num_1==0) res=0;
if(num_2==0&&num_1<4) res=num_1;
if(num_1==1&&num_2==1) res=3;
printf("%d\n",res+1);
}
return 0;
}
/*用数组的值保存系数,数组下表保存指数,从而将多项式因式转换为数组存储到计算机中
*/
*/
1028.c
#include<stdio.h>
#define MAX 121 // 注意,一定要大于最大值 , max + 1
int a[MAX], b[MAX];
int main()
{
int i, j, k, n;
for (i=0; i<MAX; i++) // 给所有项赋初值 即存储第一个多项式
{
a[i] = 1;
b[i] = 0;
}
for (i=2; i<MAX; i++) // 乘以几个括号, 控制循环 即多项式乘法中因式的个数
{
for (j=0; j<MAX; j++) // 当前状态下,第一括号里的各项(已有项)
for (k=0; k+j<MAX; k+=i) // 开始相乘,一般两个条件,一个k,一个k+j
{
b[j+k] += a[j];
}
for (j=0; j<MAX; j++) // 乘过后的各项
{
a[j] = b[j];//数组a保存当前得到的结果,以便下次计算,每次都将数组a保存的多项式作为第一个因式去做乘法计算
b[j] = 0;//b暂存中间结果,a与b的大小相同,为不影响下一次计算,用0覆盖数组b的中的所有值
}
}
while (scanf("%d",&n) != EOF)
{
printf("%d\n",a[n]);//a保存每次计算后的最终结果,因此程序结束时a保存的即为最终结果
}
return 0;
}
#include<stdio.h>
#define MAX 121 // 注意,一定要大于最大值 , max + 1
int a[MAX], b[MAX];
int main()
{
int i, j, k, n;
for (i=0; i<MAX; i++) // 给所有项赋初值 即存储第一个多项式
{
a[i] = 1;
b[i] = 0;
}
for (i=2; i<MAX; i++) // 乘以几个括号, 控制循环 即多项式乘法中因式的个数
{
for (j=0; j<MAX; j++) // 当前状态下,第一括号里的各项(已有项)
for (k=0; k+j<MAX; k+=i) // 开始相乘,一般两个条件,一个k,一个k+j
{
b[j+k] += a[j];
}
for (j=0; j<MAX; j++) // 乘过后的各项
{
a[j] = b[j];//数组a保存当前得到的结果,以便下次计算,每次都将数组a保存的多项式作为第一个因式去做乘法计算
b[j] = 0;//b暂存中间结果,a与b的大小相同,为不影响下一次计算,用0覆盖数组b的中的所有值
}
}
while (scanf("%d",&n) != EOF)
{
printf("%d\n",a[n]);//a保存每次计算后的最终结果,因此程序结束时a保存的即为最终结果
}
return 0;
}