http://wikioi.com/ 天梯网址
很不错的在线编程网站,原来做过一点ACM,这个UI实在是比当时的ACM好太多,我个人比较纠结UI,还是很喜欢这个网站所以~~
下面整理一下做过的题,做完一些整理一次,不会太多集中在一篇也不会一篇就一道:)
一、入门菜鸟
1012. 题目描述 Description
输入n个数,n<=100,找到其中最小的数和最大的数
输入描述
第一行一个整数n
接下来一行n个整数,每个整数不超过231 -1
输出描述
最小和最大的数
::为了不要多占内存既然n<=100那么用unsigned int就行,开始判断一下n因为如果是0那么后面没有比较直接返回就好,代码如下
#include <iostream> using namespace std; int main(){ unsigned int n; cin>>n; if(0==n) return 0; int m[2],t; for(int i=0;i<n;i++){ if(0==i){ cin>>t; m[0] = t; m[1] = t; } else{ cin>>t; if(t<m[0]) m[0] = t; if(t>m[1]) m[1] = t; } } cout<<m[0]<<' '<<m[1]<<endl; }
1202. 题目描述 Description
求n个数的和
输入描述 Input Description
第一行一个整数n
接下来一行n个整数
输出描述 Output Description
所有数的和
这里的题刚开始还是很简单的不会涉及大整数,所以int就好,之后就是直接加,只需要一个临时用的t
#include <iostream> using namespace std; int main(){ int n; cin>>n; if(0==n) return 0; int sum=0,t; for(int i=0;i<n;i++){ cin>>t; sum+=t; } cout<<sum<<endl; }
1203.题目描述 Description
给出两个浮点数,请你判断这两个浮点数是否相等
输入描述 Input Description
输入仅一行,包含两个浮点数
输出描述 Output Description
输出仅一行,如果相等则输出yes,否则输出no。
提示: 我们一般认为两个浮点数相等,当且当他们之间的误差不超过1e-8。既然是比较,直接相减会涉及到正负,这里特地写的宏,检验下自己在写宏的时候会不会粗心漏了括号(结果还真漏了一个T_T)
C++按说最好不要用宏,可以用常量或者内联函数代替的就代替了,这里练习一下:)
#include <iostream> #define ABS(x) ((x)<0?(-(x)):(x)) using namespace std; int main(){ double a,b; cin>>a>>b; if(ABS(a-b)<=1e-8) cout<<"yes"; else cout<<"no"; }
1204.题目描述 Description
给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置。
输入描述Input Description
仅一行包含两个字符串a和b
输出描述Output Description
仅一行一个整数
直接用string自己的函数了,比较简单
#include <iostream> #include <string> using namespace std; int main(){ string a,b; cin>>a>>b; int loc; loc = a.find(b,0); if(a.npos==loc) return 0; else cout<<(loc+1); }
1205.题目描述 Description
给出一个英语句子,希望你把句子里的单词顺序都翻转过来
输入描述Input Description
输入包括一个英语句子。
输出描述Output Description
按单词的顺序把单词倒序输出
#include<iostream> #include<vector> using namespace std; int main(){ vector<string> ss; string t; while(cin>>t) ss.push_back(t); if(0==ss.size()) return 0; vector<string>::iterator iter; for(iter=ss.end()-1;iter!=ss.begin();iter--) cout<<(*iter)<<" "; cout<<(*iter); }
1206.题目描述 Description
保留两位小数输出一个浮点数。
输入描述 Input Description
一个浮点数。double范围内
输出描述 Output Description
保留两位小数输出
先贴我自己的代码
#include <iostream> #include "stdio.h" using namespace std; int main(){ double a; cin>>a; printf("%.2f",a); }但是感觉题目不应该是这么简单吧,后来看同学有人用的流控制,感觉出这个题如果是考这个倒是有些难度,但是菜鸟不应该到这种吧。。。
#include<iomanip>
cout<<fixed<<setprecision(2)<<s<<endl;
2235.题目描述 Description
.输入机票原价(3到4位的正整数,单位:元),再输入机票打折率(小数点后最多一位数字)。编程计算打折后机票的实际价格(单位:元。计算结果要将个位数四舍五入到十位数“元”)。输入只有一行两个数(两数间用一个空格分隔),第一个为整数,表示机票原价,第二个整数或实数(如是实数,小数点后最多1位数字)表示打折率。
输入样例1:
888 7
输出样例1:
620
其实就是四舍五入然后去掉个位的数,可以这样想,int没有小数点后面,让这个数先除以10,化成int那么就保证个位以上都是保留,然后这个数乘以10那么个位一定是0,四舍五入到10位,那么加的应该是50,然后就很简单了
#include <iostream> using namespace std; int main(){ unsigned int op; float d; cin>>op>>d; cout<<(int((op*d+50)/100)*10); }