天梯题目解答--入门菜鸟

http://wikioi.com/  天梯网址

很不错的在线编程网站,原来做过一点ACM,这个UI实在是比当时的ACM好太多,我个人比较纠结UI,还是很喜欢这个网站所以~~

下面整理一下做过的题,做完一些整理一次,不会太多集中在一篇也不会一篇就一道:)


一、入门菜鸟

1012. 题目描述 Description

输入n个数,n<=100,找到其中最小的数和最大的数

输入描述

第一行一个整数n

接下来一行n个整数,每个整数不超过231 -1

输出描述

最小和最大的数

::为了不要多占内存既然n<=100那么用unsigned int就行,开始判断一下n因为如果是0那么后面没有比较直接返回就好,代码如下

#include 
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 
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 
#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 
#include 
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
#include
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 
#include "stdio.h"
using namespace std;
int main(){
    double a;
    cin>>a;
    printf("%.2f",a);
}
但是感觉题目不应该是这么简单吧,后来看同学有人用的流控制,感觉出这个题如果是考这个倒是有些难度,但是菜鸟不应该到这种吧。。。

#include

cout<<fixed<<setprecision(2)<<s<<endl;

2235.题目描述 Description

.输入机票原价(3到4位的正整数,单位:元),再输入机票打折率(小数点后最多一位数字)。编程计算打折后机票的实际价格(单位:元。计算结果要将个位数四舍五入到十位数“元”)。输入只有一行两个数(两数间用一个空格分隔),第一个为整数,表示机票原价,第二个整数或实数(如是实数,小数点后最多1位数字)表示打折率。

输入样例1:

888  7

输出样例1:

620

其实就是四舍五入然后去掉个位的数,可以这样想,int没有小数点后面,让这个数先除以10,化成int那么就保证个位以上都是保留,然后这个数乘以10那么个位一定是0,四舍五入到10位,那么加的应该是50,然后就很简单了

#include 
using namespace std;
int main(){
    unsigned int op;
    float d;
    cin>>op>>d;
    cout<<(int((op*d+50)/100)*10);
}


你可能感兴趣的:(C/C++)