版主很生气
后果很.......
后果很.......
2008-08-03 14:12
2008-08-03 16:35
程序代码:/*******************************************************************************
现有1角币1张,2角币1张,5角币1张,1元币4张,5元币2张。用这些钱可以
付出不同的各种数额的币值有多少种.
根据题意写出这个程序,也不知道结果对不对,程序的思维也有些乱,还请大家
多多指教。谢谢。
*******************************************************************************/
#include<stdio.h>
int jianche(float *p,int k)
{
int i,j;
int fanhui=1;
for(i=0;i<k;i++)
for(j=i+1;j<k;j++)
if(p[i]==p[j]) return fanhui=0;
return fanhui;
}
int main(void)
{
float jiao[8]={0.0,0.1,0.2,0.3,0.5,0.6,0.7,0.8}; /* 角钱可能出现的币值 */
float yuan_1=1.0,yuan_5=5.0; /* 元钱 */
float zhong[200];/* 总额,用于检测是否有相同数值出现 */
int i,j,k,jishu=0;
for(i=0;i<8;i++)
for(j=0;j<5;j++)
for(k=0;k<3;k++)
{
if(!(i+j+k)) continue;
zhong[jishu]=jiao[i]+yuan_1*j+yuan_5*k;
if((jianche(zhong,jishu))&&zhong[jishu]!=0.0)
printf("总额%.2f=一元%d张+五元%d张+角%.2f元 ",
zhong[jishu],j,k,i);
else continue;
if(!(jishu%2)) puts("");
jishu++;
}
printf("\n共有%d种付币方法\n",jishu);
getch();
}
2008-08-03 17:01

2008-08-03 17:22

2008-08-03 17:22
2008-08-03 17:22
2008-08-03 17:32
程序代码:#include"stdio.h"
int jiance(float *p,int k)
{
int i;
int fanhui=1;
for(i=0;i<k-1;i++) if(p[i]==p[k-1]) fanhui=0;
return fanhui;
}
int main(void)
{
float jiao[8]={0.0f,0.1f,0.2f,0.3f,0.5f,0.6f,0.7f,0.8f}; /* 角钱可能出现的币值 */
float yuan_1=1.0,yuan_5=5.0; /* 元钱 */
float zong[200];/* 总额,用于检测是否有相同数值出现 */
int i,j,k,count=0;
for(i=0;i<8;i++)
for(j=0;j<5;j++)
for(k=0;k<3;k++)
{
zong[count]=jiao[i]+yuan_1*j+yuan_5*k;
if((jiance(zong,count))&&zong[count]!=0.0)
{printf("总额%.2f=一元%d张+五元%d张+角%.2f元\t",
zong[count],j,k,jiao[i]);count++;}
}
printf("\n\n共有%d种付币方法\n",count);
getchar();
}
2008-08-03 19:15
程序代码:/*******************************************************************************
把5040分拆成4个不同自然数的乘积,使这几个数的和为最小
~~~~~~~~~~~~~~~~~~~~~~~~~~
按照题意,编写了这么个程序,可是运行起来十分让人恼火,
好几分钟了都不出结果,可能是for嵌套太多的原因吧?
还是希望哪位高手写出别样的程序来吧。
*******************************************************************************/
#include<stdio.h>
int main(void)
{
int f=5040;
int k=1260; /* 因为分解成为4个数,所以最小值的出现应该不是在1/4范围外*/
int h[5]={1260,1260,1260,1260,5040};/*作为存放数值以及比较大小来用,所以赋初值是最大值840*/
int a,b,c,d;
for(a=1;a<=k;a++)
for(b=1;b<=k;b++)
for(c=1;c<=k;c++)
for(d=1;d<=k;d++)
if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d&&(a*b)*(c*d)==f)
if(h[4]>(a+b)+(c+d))
{
h[0]=a;h[1]=b;h[2]=c;h[3]=d;
h[4]=(a+b)+(c+d);
}
printf("a=%d,b=%d,c=%d,d=%d",h[0],h[1],h[2],h[3]);
getch();
}
2008-08-03 21:40
2008-08-03 22:04