解题思路:
题目给出了初始的两个值a、b,进行线性的组合,让我们求解求最大不能组合出的数字;假设该数字是n,那么从n+1一直到无穷都必须能够由a、b进行组合。
可以很容易的想到(后面的通过前面的+a、+b得到),这串组合数字最小的正周期为T=min(a,b),那么只要我们求得的第一个数字x ,其后连续T位都能由a、b组合即可得到答案为x-1。
注意事项:
使用数组visit[i]表示是否由a、b组合得到,初始值visit[a]=visit[b]=1,visit数组空间必须足够大。
设置变量con记录连续次数,且当visit[i]值为1时,则该数可以再+a、+b,即visit[i+a]=visit[i+b]=1;若不为1,则变量con重置为0;当con=min(a,b)时,结束循环。
参考代码:
#include
using namespace std;
int main(){
int i,a,b,con=0,temp;//con表示当前连续次数
int visit[100000]={0};
cin>>a>>b;
if(a>b){
temp=a;
a=b;
b=temp;
}
visit[a]=visit[b]=1;
for(i=1;con<a;i++){
if(visit[i]) {
visit[i+a]=visit[i+b]=1;
con++;
}else{
con=0;
}
}
cout<<i-a-1;
return 0;
}
0.0分
1 人评分
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:590 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:630 |
字符串输入输出函数 (Java代码)浏览:1439 |
C语言训练-数字母 (C语言代码)浏览:584 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:540 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:483 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:853 |
WU-复数求和 (C++代码)浏览:2013 |
WU-格式化数据输出 (C语言代码)浏览:1752 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:1420 |