【喵 - 20160924】H - Efim and Strange Grade
2016-09-27 14:14
323 查看
题意:
给你字符串长度 n 和 时间限制 t
每1一个单位时间 你可以 选一个数字进行四舍五入
请在规定时间内改出最大的数字并输出
NOTE;
1.对于9.3这种不需要做修改,直接就是最大的
2.对于10.245564489这样的, 只需要找小数点后面第一个大于4的位数做四舍五入就可以
3.要考虑进位 比如 999.5 199.5 遇到小数点就跳过
进位的实现:分两种:1.需要自己添加1 如 99.996
2.不需要自己添加1 如 299.9996
利用k指向目前处理的位置。经过while循环(当s[k] == '.' || s[k] == '9' 时继续循环,每次循环都会导致k减少1) 若k最后为-1,说明是第一种,若为0说明是第二种,若都不是说明是类似于此 123.4569995
//Efim and Strange Grade
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a
, b
, c
;
string s;
int main(){
int n, t;
scanf("%d%d", &n, &t);
cin>>s;
int len = (int)s.size();
int k, h;
for(k=0; k<len; k++){
if(s[k] == '.') break;
}
for(h=k+1; h<len; h++){
if(s[h]>='5') break;
}
if(h==len) h--;
len=h;
while(1){
if(s[len] == '.') {
len--;
break;
}
if(len<=0 || t==0) break;
if(s[len]<'5') break;
else{
if((s[len-1]=='.' && s[len-2] == '9') || (s[len-1]!='.' && s[len-1]=='9')) { // 9.995 // 199.9995
int k = len;
s[k]='0'; //9.990 // 199.9990
k--; // // k = 6
while(s[k]=='9' || s[k]=='.') { //无论小数部分还是整数部分 遇见9不断进位 9.990
if(s[k]=='.') k--; //
else s[k]='0', k--;
} //0.000 //100.0000 k = 0
string ss = "\0";
ss += '1';
if(k==-1) {
for(int i=0; i<len; i++){ //len == 4
if(s[i]=='.') break;
ss+='0';
} //10
s.clear();
s = ss;
len = s.size()-1;//len == 1
break;
}
else
s[k] ++;//19.9995
t--;
len--;
}
else if(s[len-1]=='.') s[len-2] = s[len-2]+1, len--, t--;
else s[len-1] = s[len-1]+1, len--, t--;
}
if(t<0) t=0;
}
for(int i=0; i<=len; i++) cout<<s[i];
cout<<endl;
return 0;
}
参考:
http://blog.csdn.net/yhyyxt/article/details/52648639
给你字符串长度 n 和 时间限制 t
每1一个单位时间 你可以 选一个数字进行四舍五入
请在规定时间内改出最大的数字并输出
NOTE;
1.对于9.3这种不需要做修改,直接就是最大的
2.对于10.245564489这样的, 只需要找小数点后面第一个大于4的位数做四舍五入就可以
3.要考虑进位 比如 999.5 199.5 遇到小数点就跳过
进位的实现:分两种:1.需要自己添加1 如 99.996
2.不需要自己添加1 如 299.9996
利用k指向目前处理的位置。经过while循环(当s[k] == '.' || s[k] == '9' 时继续循环,每次循环都会导致k减少1) 若k最后为-1,说明是第一种,若为0说明是第二种,若都不是说明是类似于此 123.4569995
//Efim and Strange Grade
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a
, b
, c
;
string s;
int main(){
int n, t;
scanf("%d%d", &n, &t);
cin>>s;
int len = (int)s.size();
int k, h;
for(k=0; k<len; k++){
if(s[k] == '.') break;
}
for(h=k+1; h<len; h++){
if(s[h]>='5') break;
}
if(h==len) h--;
len=h;
while(1){
if(s[len] == '.') {
len--;
break;
}
if(len<=0 || t==0) break;
if(s[len]<'5') break;
else{
if((s[len-1]=='.' && s[len-2] == '9') || (s[len-1]!='.' && s[len-1]=='9')) { // 9.995 // 199.9995
int k = len;
s[k]='0'; //9.990 // 199.9990
k--; // // k = 6
while(s[k]=='9' || s[k]=='.') { //无论小数部分还是整数部分 遇见9不断进位 9.990
if(s[k]=='.') k--; //
else s[k]='0', k--;
} //0.000 //100.0000 k = 0
string ss = "\0";
ss += '1';
if(k==-1) {
for(int i=0; i<len; i++){ //len == 4
if(s[i]=='.') break;
ss+='0';
} //10
s.clear();
s = ss;
len = s.size()-1;//len == 1
break;
}
else
s[k] ++;//19.9995
t--;
len--;
}
else if(s[len-1]=='.') s[len-2] = s[len-2]+1, len--, t--;
else s[len-1] = s[len-1]+1, len--, t--;
}
if(t<0) t=0;
}
for(int i=0; i<=len; i++) cout<<s[i];
cout<<endl;
return 0;
}
参考:
http://blog.csdn.net/yhyyxt/article/details/52648639
相关文章推荐
- 【22.17%】【codeforces718B】 Efim and Strange Grade
- Codeforces Round #373 (Div. 2) C. Efim and Strange Grade 水题
- codeforces 719 C. Efim and Strange Grade(模拟)
- Codeforces Round #373 (Div. 1) A.Efim and Strange Grade
- Codeforces Round #373 (Div. 2) C. Efim and Strange Grade(贪心+模拟,t次进位之后的数是什么)
- Codeforces 718A A. Efim and Strange Grade
- [codeforces]A. Efim and Strange Grade——贪心+字符串处理
- Codeforces 719C Efim and Strange Grade【贪心】
- Codeforces Round #373 (Div. 1)A. Efim and Strange Grade【恶心模拟】
- Codeforces 719C - Efim and Strange Grade (模拟
- Codeforces Round #373 (Div. 2) C: Efim and Strange Grade
- [codeforces] C - Efim and Strange Grade 模拟+贪心
- codeforces 373 A - Efim and Strange Grade(算数模拟)
- [Codeforces #373 (Div. 2) C. Efim and Strange Grade] 模拟
- Codeforces Round #373 (Div. 1) A. Efim and Strange Grade 解题报告
- Codeforces Round #373 (Div. 2) C. Efim and Strange Grade —— 贪心 + 字符串处理
- Codeforces 719C Efim and Strange Grade 贪心+模拟
- Efim and Strange Grade
- codeforces 719 C Efim and Strange Grade (模拟)
- strange c define for macro and array(c语言)