程序员实习生


私信TA

用户名:qq1213988904

访问量:436

签 名:

冲冲冲!!!!!

等  级
排  名 21795
经  验 628
参赛次数 1
文章发表 4
年  龄 20
在职情况 学生
学  校 河南工程学院
专  业 软件工程

  自我简介:

TA的其他文章

1197: 发工资咯
浏览:80

思路:根据题意可以看出答案一定大于两数中最大的那个,小于两数乘积。又因为要找到最大的那个“最大不能买到的数”,所以直接从乘积开始,从大到小遍历,即区间(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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区