趣味C语言小编程

趣味C语言小编程,第1张

题眼就是求出2~10的最小公倍数,然后减一。

模拟排队的算法是可行的,但不是最优的。

#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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8124305.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存