COdevs 天梯 水题系列

1203 判断浮点数是否相等

时间限制: 1 s    空间限制: 128000 KB    题目等级 : 青铜 Bronze

题目描述 Description
给出两个浮点数,请你判断这两个浮点数是否相等
输入描述 Input Description
输入仅一行,包含两个浮点数
输出描述 Output Description
输出仅一行,如果相等则输出yes,否则输出no。
样例输入 Sample Input
2.980000001 2.9800000000001
样例输出 Sample Output
yes
数据范围及提示 Data Size & Hint
我们一般认为两个浮点数相等,当且当他们之间的误差不超过1e-8。
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 char s1[500],s2[500];
 6 int main()
 7 {
 8     cin>>s1>>s2;
 9     int cnt=0,cur=-1;
10     while(cnt<strlen(s1)){
11         if(s1[cnt]==s2[cnt]&&s2[cnt]=='.') cur=0;
12         if(s1[cnt]==s2[cnt]) cnt++;
13         if(cur>=0) cur++;
14         if(cur==8){ printf("yes");return 0; }
15         if(s1[cnt]!=s2[cnt]&&cur<8){ printf("no");return 0; }
16     }
17     return 0;
18 } 

 

2235 机票打折

时间限制: 1 s    空间限制: 32000 KB    题目等级 : 青铜 Bronze

题目描述 Description

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

输入样例1:

888  7

输出样例1:

620

输入样例2:

1255  7 

输出样例2:

 880

输入描述 Input Description

输入只有一行两个数(两数间用一个空格分隔),第一个为整数,表示机票原价,第二个整数或实数(如是实数,小数点后最多1位数字)表示打折率。

输出描述 Output Description

输出只有一行一个正整数,表示打折后的机票价格。

样例输入 Sample Input

888 7

样例输出 Sample Output

620

数据范围及提示 Data Size & Hint

原机票价格大于100小于9999,打折率大于1小于9.9。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 int n;
 6 double m;
 7 int k;
 8 int main()
 9 {
10     scanf("%d%lf",&n,&m);
11     m*=0.1;n=n*m;k=n%10;
12     if(k<=4) n-=k;
13     if(k>=5) n+=(10-k);
14     printf("%d\n",n);
15     return 0;
16 } 

 

1204 寻找子串位置

时间限制: 1 s    空间限制: 128000 KB    题目等级 : 青铜 Bronze

题目描述 Description

给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置。

输入描述 Input Description

仅一行包含两个字符串a和b

输出描述 Output Description

仅一行一个整数

样例输入 Sample Input

abcd bc

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

字符串的长度均不超过100

Pascal用户请注意:两个字符串之间可能包含多个空格

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 char s1[120],s2[120];
 6 void getNext(char *p,int *next) {
 7     int j,k;
 8     next[0]=-1;
 9     j=0;
10     k=-1;
11     while(j<strlen(p)-1) {
12         if(k==-1||p[j]==p[k]) { //匹配的情况下,p[j]==p[k]
13             j++;
14             k++;
15             next[j]=k;
16         } else //p[j]!=p[k]
17             k=next[k];
18     }
19 }
20 int KMPMatch(char *s,char *p) {
21     int next[100];
22     int i=0,j=0;
23     getNext(p,next);
24     while(i<strlen(s)) {
25         if(j==-1||s[i]==p[j]) {
26             i++;
27             j++;
28         } else {
29             j=next[j]; //消除了指针 i 的回溯
30         }
31         if(j==strlen(p))
32             return i-strlen(p);
33     }
34     return -1;
35 }
36 int main(){
37     cin>>s1>>s2;
38     printf("%d\n",KMPMatch(s1,s2)+1);
39     return 0;
40 }

暴力稳过的一个题,为了装逼还是用了刚学的KMP算法。

posted @ 2017-01-18 11:00  浮华的终成空  阅读(174)  评论(0编辑  收藏  举报

Contact with me