找数
来源:互联网 发布:最全家庭网络个人投资 编辑:程序博客网 时间:2024/04/30 20:19
找数(期末考试第一题)
时间限制 : 10000 MS 空间限制 : 65536 KB
问题描述
给你一个正整数Z,请你找两个正整数X和Y,使得X+Y=Z,且X和Y的最小公倍数尽可能大。输出X和Y的最小公倍数。
输入格式
第一行,一个整数Z
输出格式
一行,一个整数,表示X和Y的最小公倍数。
提示
对于30%的数据 2<=Z<=10^3
对于60%的数据 2<=Z<=10^5
对于100%的数据 2<=Z<=10^9
样例1说明:X=1,Y=3
样例2说明:X=3,Y=7
样例3说明:X=11,Y=12
考试时写的代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
long long X,Y,Z,ans=0;
int gongbei(long long x,long long y){ //当时认为第一题很简单便直接使用了暴力枚举,结果超时了。
long long t,k=x,p=y;
while(y!=0){
t=x%y;x=y;y=t;
}
return k*p/x;
}
int main(){
freopen("find.in","r",stdin);
freopen("find.out","w",stdout);
cin>>Z;
long long a,b,c;
for(int i=1;i<=Z/2;i++){
a=i;b=Z-i;
c=gongbei(a,b);
if(c>ans)ans=c;
}
cout<<c;
}
考试后重写的代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
long long Z,A,B,ans;
int main(){
//freopen("find.in","r",stdin);
//freopen("find.out","w",stdout);
scanf("%lld",&Z);
if(Z%2)ans=(Z/2)*(Z/2+1);//因为相邻的两个奇数一定是互质的,所以只需找出两个相加等于Z的相邻奇数即可。
else
{
A=Z/2;
if(A%2)ans=(A+2)*(A-2);
else ans=(A-1)*(A+1);
}
printf("%lld",ans);
return 0;
时间限制 : 10000 MS 空间限制 : 65536 KB
问题描述
给你一个正整数Z,请你找两个正整数X和Y,使得X+Y=Z,且X和Y的最小公倍数尽可能大。输出X和Y的最小公倍数。
输入格式
第一行,一个整数Z
输出格式
一行,一个整数,表示X和Y的最小公倍数。
提示
对于30%的数据 2<=Z<=10^3
对于60%的数据 2<=Z<=10^5
对于100%的数据 2<=Z<=10^9
样例1说明:X=1,Y=3
样例2说明:X=3,Y=7
样例3说明:X=11,Y=12
考试时写的代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
long long X,Y,Z,ans=0;
int gongbei(long long x,long long y){ //当时认为第一题很简单便直接使用了暴力枚举,结果超时了。
long long t,k=x,p=y;
while(y!=0){
t=x%y;x=y;y=t;
}
return k*p/x;
}
int main(){
freopen("find.in","r",stdin);
freopen("find.out","w",stdout);
cin>>Z;
long long a,b,c;
for(int i=1;i<=Z/2;i++){
a=i;b=Z-i;
c=gongbei(a,b);
if(c>ans)ans=c;
}
cout<<c;
}
考试后重写的代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
long long Z,A,B,ans;
int main(){
//freopen("find.in","r",stdin);
//freopen("find.out","w",stdout);
scanf("%lld",&Z);
if(Z%2)ans=(Z/2)*(Z/2+1);//因为相邻的两个奇数一定是互质的,所以只需找出两个相加等于Z的相邻奇数即可。
else
{
A=Z/2;
if(A%2)ans=(A+2)*(A-2);
else ans=(A-1)*(A+1);
}
printf("%lld",ans);
return 0;
}
反思:切忌不加思考地用套路来解题,应该选择更优雅更巧妙的方式解题。
0 0
- 找数
- 找数
- 找数
- 找数
- 找数
- 找吸血鬼数(转)
- 找雷劈数
- C++找雷劈数
- 找重复数
- 圆盘找数
- 找丢失的数
- 找中间数问题
- 找最小数
- 找数-递归
- 找数算法笔记
- 找 完全数
- hdu5247 找连续数
- 【JZOJ】3188 找数
- android studio添加butterknif插件
- [1] Window PowerShell DSC 学习系列----DSC的定义和2种架构模式
- java spring中对properties属性文件加密及其解密
- HTML转义字符汇总
- android----fragment学习中的listFragment
- 找数
- Rails配置项force_ssl与hsts
- 基于WWW的get请求Demo
- IE css3常用属性兼容性
- HTML5页面开发的基础性模板
- 328. Odd Even Linked List
- 重构自己
- 1078. Hashing
- 计划任务:不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接。中断与此服务器或共享资源的连接,然后在试一次