模拟排队的算法是可行的,但不是最优的。
#include <stdio.h>
int od(int x,int n) //x是否能被n整除,是返回1,否返回0
{
if (x%n) return 0
return 1
}
int gbs(int a[],int n) //求a[n]内所有元素的最小公倍数
{
int i,j,k,o,m=0
int b[20],c[100]
for (i=0i<ni++)
{
if(m<a[i]) m=a[i]
b[i]=a[i]
}
j=2o=0
while (j<=m)
{
k=0
for (i=0i<ni++){
if (od(b[i],j)) k++
if (k>1) break
}
if(k>1)
{
c[o++]=j
for (i=0i<ni++)
if (od(b[i],j)) b[i]=b[i]/j
m=0
for (i=0i<ni++)
if(m<b[i]) m=b[i]
}
else
j++
}
k=1
for(i=0i<oi++)
{
k*=c[i]
}
for (i=0i<ni++)
{
k*=b[i]
}
return k
}
main()
{
int a[10]
for(int i=1i<=10i++)
a[i-1]=i
printf("count=%d\n",gbs(a,10)-1)
getchar()
return 0
}
#include <stdio.h>//首先,请原谅我,你写的没有注释太难看懂你每一步想要表达什么了,还不如重新写一个比较快,见谅!感觉这类问题画下图找下规律会快很多,我画了有3个人3本书的方法找到的规律#define ALLBOOK 5
void main()
{
int PA=0,PB=0,PC=0,WayCount=0
for(PC++)
{
if(PC>ALLBOOK-PA-PB)
{
PB++PC=0 //PA,PB,PC不能大于5,所以PC不能大于PA+PB,故如果大于了,则进位
}
if(PB>ALLBOOK-PA-PC)
{
PA++PB=0PC=0//由于PB是上一步增加所得,不考虑其他原因,同上。
}
if(PA>ALLBOOK)
break //最终结果一定是PC慢慢流向PA,PA达到5,则停止。
printf("A:%d,B:%d,C:%d\n",PA,PB,PC)
WayCount++
}
printf("Its %d answer in this question!",WayCount)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)