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算法。