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。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char s1[],s2[];
int main()
{
cin>>s1>>s2;
int cnt=,cur=-;
while(cnt<strlen(s1)){
if(s1[cnt]==s2[cnt]&&s2[cnt]=='.') cur=;
if(s1[cnt]==s2[cnt]) cnt++;
if(cur>=) cur++;
if(cur==){ printf("yes");return ; }
if(s1[cnt]!=s2[cnt]&&cur<){ printf("no");return ; }
}
return ;
}
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。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n;
double m;
int k;
int main()
{
scanf("%d%lf",&n,&m);
m*=0.1;n=n*m;k=n%;
if(k<=) n-=k;
if(k>=) n+=(-k);
printf("%d\n",n);
return ;
}
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用户请注意:两个字符串之间可能包含多个空格
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char s1[],s2[];
void getNext(char *p,int *next) {
int j,k;
next[]=-;
j=;
k=-;
while(j<strlen(p)-) {
if(k==-||p[j]==p[k]) { //匹配的情况下,p[j]==p[k]
j++;
k++;
next[j]=k;
} else //p[j]!=p[k]
k=next[k];
}
}
int KMPMatch(char *s,char *p) {
int next[];
int i=,j=;
getNext(p,next);
while(i<strlen(s)) {
if(j==-||s[i]==p[j]) {
i++;
j++;
} else {
j=next[j]; //消除了指针 i 的回溯
}
if(j==strlen(p))
return i-strlen(p);
}
return -;
}
int main(){
cin>>s1>>s2;
printf("%d\n",KMPMatch(s1,s2)+);
return ;
}
暴力稳过的一个题,为了装逼还是用了刚学的KMP算法。