CF-697BBarnicle与691CExponential notation
来源:互联网 发布:ubuntu ssd 优化 编辑:程序博客网 时间:2024/06/06 23:51
无聊写两个题解吧,上午做比赛拉的,感触很多!
Barney is standing in a bar and starring at a pretty girl. He wants to shoot her with his heart arrow but he needs to know the distance between him and the girl to make his shot accurate.
题意很简单,学过c语言的看样例就知道什么意思了,就是特殊情况实在太多,写的我好烦!
#include<bits/stdc++.h>using namespace std;const int N=1000+10;char a[N];int main(){ int i,j; while(~scanf("%s",a)) { int x=0,k1=0,k2=0; int len=strlen(a); int zheng=0; for(i=0; a[i]!='.'; i++) zheng=zheng*10+(a[i]-'0');//整数部分 k1=i; int k3=0; for(i=len-1;; i--) if(a[i]=='e') break; k2=i;//e的位置; j=k2-1; for(j=j; j>=0; j--) if(a[j]>'0'&&a[j]<='9') break; k3=j;//左起第一个不为0的位置,相当于舍去后缀0; if(zheng==0)//注意题目说了a、b 同时为0; { int f=0; for(i=0; i<=k3; i++) { printf("%c",a[i]); f=1; } if(!f) printf("0");//这是防0.0这种样例; printf("\n"); } else { i=k2+1; for(i=i; i<len; i++) x=x*10+(a[i]-'0'); if(x==0)//说明不用移; { for(i=0; i<=k3; i++) printf("%c",a[i]); printf("\n"); } else if(x+k1<k2-1) { if(zheng!=0) printf("%d",zheng); i=k1+1; if(x+k1<=k3) { for(i=i; i<=k3; i++) { printf("%c",a[i]); if(i==x+k1&&i<k3) printf("."); } } else { for(i=i; i<=k3; i++) printf("%c",a[i]); for(i=i; i<=k1+x; i++) printf("0"); } printf("\n"); } else if(x+k1==k2-1) { if(zheng!=0) printf("%d",zheng); i=k1+1; for(i=i; i<k2; i++) printf("%c",a[i]); printf("\n"); } else if(x+k1>=k2) { if(zheng!=0) printf("%d",zheng); i=k1+1; for(i=i; i<k2; i++) printf("%c",a[i]); for(i=k2; i<=k1+x; i++) printf("0"); printf("\n"); }//// printf("%d %d %d %d\n",k1,k2,k3,x); } } return 0;}思维不行,代码能力勉强可以,导致以上写的比较繁琐,若有不懂的地方欢迎在评论区留言!
You are given a positive decimal number x.
这道题就是上一题的逆过程,给出这个实数,要你化成p.qEb的形式;
基本和上面差不多,就是注意一下前缀0与后缀0;
#include<bits/stdc++.h>using namespace std;const int N=1e6+10;char a[N];char b[N];int main(){ int i; while(~scanf("%s",a)) { int len=strlen(a); int k1=0,k2=0,k3=0; for(i=len-1; i>=0; i--) if(a[i]>'0'&&a[i]<='9') { k3=i;//右起第一个不为0的位置; break; } for(i=0; i<len; i++) if(a[i]>'0'&&a[i]<='9') { k1=i;//左起第一个不为0的位置; break; } for(i=0; i<len; i++) if(a[i]=='.') { k2=i;//找出点的位置; break; } if(k1==k3&&k1==0)//说明只有一位,可能是1、1.0、100这些情况; { if(a[k1]=='0') printf("0\n"); else { printf("%c",a[k1]); if(k2==0)//没有小数点; { if(len==1) { printf("\n"); continue; } else printf("E%d\n",len-1); } else { if(k2-k1==1) { printf("\n"); continue; } else printf("E%d\n",k2-k1-1); } } continue; } if(k2==0) {// int f=1; if(a[0]=='.')//第一位就是小数点 { for(i=k1; i<=k3; i++) { printf("%c",a[i]); if(i==k1&&k1!=k3) printf("."); } printf("E%d\n",k2-k1); } else//没有小数点; { for(i=k1; i<=k3; i++) { printf("%c",a[i]); if(i==k1&&k1!=k3) printf("."); } if(k1==k3) { printf("\n"); continue; } else printf("E%d\n",len-k1-1); } } else { if(k2<k1) { for(i=k1; i<=k3; i++) { printf("%c",a[i]); if(i==k1&&k1!=k3) printf("."); } printf("E%d\n",k2-k1); } else if(k2>=k1&&k2<=k3) { for(i=k1; i<=k3; i++) { if(a[i]=='.') continue; printf("%c",a[i]); if(i==k1) printf("."); } if(k2-k1==1) { printf("\n"); continue; } printf("E%d\n",k2-k1-1); } else { for(i=k1; i<=k3; i++) { if(a[i]=='.') continue; printf("%c",a[i]); if(i==k1&&k1!=k3) printf("."); } if(k2-k1==1) continue; printf("E%d\n",k2-k1-1); } } } return 0;}这个代码看起来貌似没有上一题那么复杂,主要是思维思路要清晰,找好方法,一遍A;
下面就这两题说说我的感想吧:
就在昨天,我悟出了一个很重要又很平凡的方法。就是:做题,千万要想好思路再去写,思路清晰了代码自然很快就出来了,可是思维很混乱脑袋模模糊糊或者有一点想法就着手写,写出来是运气,写不出来(卡壳)是正常,就是这样不知道浪费了多少时间;一个题,静下心来做不会发很多时间(个人认为),可是往往大部分时间就是心浮气躁,往往一卡壳就又得停下来分析,最后发现思路错了,等于一直在做无用功,题没做出来时间又过去了,效率低下!!
- CF-697BBarnicle与691CExponential notation
- CodeForces 697BBarnicle
- CodeForces 691C Exponential notation
- Codeforces 691C. Exponential notation(模拟)
- CodeForces 691C Exponential notation 模拟
- Codeforces-691C-Exponential notation(模拟)
- CodeForces 691C Exponential notation(模拟)
- Codeforces 691C. Exponential notation 模拟
- 【模拟】Codeforces 691C Exponential notation
- Codeforces-691C Exponential notation(模拟)
- OF位 与 CF位
- LeetCode OJ --问题与解答 Evaluate Reverse Polish Notation
- cf 697 C
- cf 697 B(模拟)
- cf 697 A
- cf 697 D
- CF
- CF
- Linux下查看磁盘分区命令详解
- socket编程_tcp协议_客户端
- Codeforces 696B. Puzzles (概率DP求期望)
- openjdk 与 jdk 区别
- 用php遍历目录下的文件
- CF-697BBarnicle与691CExponential notation
- scala学习笔记二
- start—py(1、函数)
- C语言函数sscanf()的用法
- 2016.07.16【初中部 NOIP提高组 】模拟赛C
- 漫步微积分四——导数的定义
- Activity 分割动画
- 【JZOJ 4638】第三条跑道
- 页面加载完成后执行的动作