最近也没什么时间写,写了这个,然后发现原来的算法不对,然后上网看了看,大家是用dfs实现的,突然感觉到不能耍小聪明啊,得先老老实实得练习基础啊。
ps:对于while(cin>>a>>b)这个语句的语法啊,一开始没太在意,只认为是一个输入,让我time limited了N次。最后才发现这个能让循环退出啊,什么鬼,果然还是too young too naive啊,果然C++还是不太熟,得多复习复习了
#include<iostream>
using namespace std;
int a,b;
bool flagb,flag;//flag表示找到,flagb表示b整除
void dfs(int a,int b,int k)
{
if(k==101)return;
if(a==1&&b==1)flag=1;
else if(b==1) flagb=1;
if(flag==1||(k>a&&k>b)) return;
if(a%(k+1)==0)dfs(a/(k+1),b,k+1);
if(b%(k+1)==0)dfs(a,b/(k+1),k+1);
dfs(a,b,k+1);
}
int main()
{
while(cin>>a>>b)
{
if(a<b){
int c=a;
a=b;
b=c;
}
flagb=flag=0;
dfs(a,b,1);
if(flag==1||flagb==0)
cout<<a<<endl;
else
cout<<b<<endl;
}
system("pause");
return 0;
}
- 最短路(Floyd、Dijstra,BellmanFord)
2.最小生成树(先写个prim,kruscal要用并查集,不好写)
3.大数(高精度)加减乘除
4.二分查找. (代码可在五行以内)
5.叉乘、判线段相交、然后写个凸包.
6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)
7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式. - 调用系统的qsort, 技巧很多,慢慢掌握.
- 任意进制间的转换
据说这些都是些基础,得敲上个十几遍,虽然一点感觉都没有,但这做个记录吧,分享分享