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);
}