在一些情景中会遇到需要求解最小公倍数的情况,两个数甚至多个数的最小公倍数
可以使用暴力求解的方法来实现
例如下题:
题目描述
在爱尔兰守神节那天,举行每年一度的庆祝游戏,指挥者若将乐队排成10人、9人、8人、7人、6人、5人、4人、3人和2人一排时,最后的一排总是缺少一个人。
那些人想这个位置大概是给数月前死去的乐队成员凯西还留着位置。指挥者见到总缺一人恼火了,叫大家排成一列纵队前进。
编程算出乐队究竟有多少人?(求出最小数)(需要有循环结构),将结果输出到out.txt文件中。
题目解读
实质是求10,9,8,7,6,5,4,3,2的最小公倍数
核心代码
int fun()
{
for(int t=19;;t+=10)//因为假设答案为s,则s+1为10的倍数,s=9+n*10(n为某一整数)
//所以t也以十倍增长
{
if(t%10==9&&t%9==8&&t%8==7&&t%7==6&&t%6==5&&t%5==4&&t%4==3&&t%3==2&&t%2==1)
{
return t;//return结束函数调用
}
}
}
对以上代码进行优化
int fun()
{
for(int i=19,j;;i+=10)
{
for(j=2;j<=10;j++)
{ //j记录求余数的情况,从对2取余到10取余;
//若符合则j++;
if(i%j!=j-1)
{
break;
}
}
if(j==11)
return i;//如果在i不变的情况下j取到11;意味着此时i满足所以条件;输出i,并结束函数调用
}
}
全部代码
#include<fstream>
using namespace std;
int fun()
{
for(int i=19,j;;i+=10){
for(j=2;j<=10;j++)
if(i%j!=j-1)break;
if(j==11)
return i;
}
}
int main()
{
ofstream outf("out.txt");//文件流绑定
outf<<fun()<<endl;
return 0;
}