思路:根据题意可以看出答案一定大于两数中最大的那个,小于两数乘积。又因为要找到最大的那个“最大不能买到的数”,所以直接从乘积开始,从大到小遍历,即区间(max(a,b),a*b),可以节约一部分时间。我才用较笨的方法,使用了三层for循环,大大加大了时间复杂度,又定义了两个数组,增加了空间复杂度,效率较低,目前想不出来更好的方法。
代码:
#include<iostream>
using namespace std;
int main(){
int a,b,max;
int num=0,ans;//ans是要输出的变量
int flag=0;//用来判断是否满足条件,来减少不必要的运行
cin>>a>>b;
max=a>b?a:b;//令max为a,b中较大的数字
int na[max]={0};
int nb[max]={0};
for (int i=1;na[i-1]<a*b;i++)
na[i]=a*i;
for(int i=1;nb[i-1]<a*b;i++)
nb[i]=b*i;
for(int num=a*b;num>max;num--){
for(int i=0;i<max;i++){
for(int j=0;j<max;j++) {
if(na[j]+nb[i] == num){
flag=0;
break;
}else flag=1;
}if(flag==0)break;
}
if(flag){
ans=num;
break;
}
}
if(ans==0)return -1;
cout<<ans;
return 0;
}
0.0分
0 人评分
C语言训练-列出最简真分数序列* (C语言代码)浏览:505 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1030 |
输出正反三角形 (C语言代码)格式错误!!!浏览:1140 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:1195 |
C语言训练-大、小写问题 (C语言代码)浏览:724 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:830 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:519 |
1025题解浏览:736 |
2006年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:661 |
大神老白 (C语言代码)浏览:600 |