标签:
关卡1-3,6道题 循环!循环!循环!
任务说明:计算机最不怕的就是重复。你让它做10000次同样的事它也不怕啦,但是让他做1亿亿次的话……
要完成这个任务,请将以下的题目都AC掉(即通过这道题目):
1. 三连击 P1008
2.级数求和 P1035
3.数字反转 P1307
4.小玉在游泳 P1423
5.小鱼的航程(改进版) P1424
6.计数问题 P1980
成就达成时间:2015-07-15 21:54
什么?你问我这么水的题怎么拖了这么久?
首先今天课比较多……
其次被string坑死了
真是Qiku了、、、
我大Pascal多么自然地str(i,s)什么的,跑这来没玩死我。
1. 三连击 P1008
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。
hhhhh。NOIp史上最伟大的题。
他训练了非常伟大的一种方法---打表法。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 cout<<192<<" "<<384<<" "<<576<<endl; 6 cout<<219<<" "<<438<<" "<<657<<endl; 7 cout<<273<<" "<<546<<" "<<819<<endl; 8 cout<<327<<" "<<654<<" "<<981<<endl; 9 return 0; 10 } 11
2.级数求和 P1035
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。
现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。
我如今才意识到居然那么久之前就玩过级数
当初怎么想的?台阶级数?hhhh
这题也是水题
但是专坑Pascal-->c系列选手
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int k; 6 cin>>k; 7 double s=0; 8 for (int i=1;i<=21400000;++i) //我就是属于那种能不写while就不写的人,肉麻吧 9 { 10 s=s+1.0/i; //传统原生c系选手一定很清楚 11 if (s>k) // 除号前后是整数为整除,所以一定写0.1 12 { 13 cout<<i<<endl; 14 return 0; 15 exit; 16 } 17 } 18 return 0; 19 } 20
3.数字反转 P1307
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入格式:
输入文件名为reverse.in 。
输入共1 行,一个整数 N。
输出格式:
输出文件名为reverse.out 。
输出共1行,一个整数,表示反转后的新数。
【样例输入1】 123 【样例输入2】 -380
【样例输出1】 321 【样例输出2】 -83
没有难度,我说对pascal,然而如果你不熟悉String in Cpp(像我一样、那就呵呵呵吧)
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main() 5 { 6 string st; 7 char s; 8 cin>>st; 9 int n=st.size(); //n:=length(st); 10 n--; //下标为0~n-1 11 s=st[n]; 12 while (s==‘0‘) //注意等于是双等号这个专为Pascal设计的坑。 13 {0 14 --n; 15 s=st[n]; 16 } 17 if (st[0]==‘-‘) //Cpp中都是0开头,st[0]存第一个字符而不是字符长度 18 { cout<<‘-‘; 19 for (int i=n;i>=1;--i) 20 cout<<st[i]; 21 } 22 else 23 for (int i=n;i>=0;--i) 24 cout<<st[i]; 25 return 0; 26 }
4.小玉在游泳 P1423
小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知4道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。
这个丝毫没有坑,一分钟搞定。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 double meters=0; 6 double s=0; 7 double power=2.0; 8 cin>>meters; 9 for (int i=1;i<=21000000;++i) //依旧强行用for 10 { 11 s=s+power; 12 power=power*0.98; 13 if (s>=meters) 14 { 15 cout<<i<<endl; 16 return 0; 17 exit; 18 } 19 } 20 return 0; 21 }
22
5.小鱼的航程(改进版) P1424
有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x<=7)开始算起,请问这样过了n天以后,小鱼一共累计游泳了多少公里呢?
这个我被坑了很久。最后换了下算法……晕晕乎乎的丝毫想不出之前哪里错了(WA 1个点)
1 /*错误代码,90分*/ 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 int x,n; 7 cin>>x>>n; 8 int length=0; 9 while (n>0) 10 { 11 for (int i=x;i<=5;++i,--n) 12 { 13 if (n<=0) break; 14 length+=250; 15 } 16 x=1; 17 n=n-2; 18 if (n<=0) break; 19 } 20 cout<<length<<endl; 21 return 0; 22 }
1 /* AC */ 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 int x,n; 7 cin>>x>>n; 8 int length=0; 9 for (int i=1;i<=n;++i) 10 { 11 if (x<=5) length+=250; 12 ++x; 13 if (x==8) x=1; 14 } 15 cout<<length<<endl; 16 return 0; 17 }
这个 思路上没什么问题。但PJ第一道这种水平还老挂掉真是太丢人了!!!!!!!!!没脸见人了。
Qiku……
然而,这远远不是终点
6.计数问题 P1980
试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1
到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。
这又是PJ第一道水题。
PASCAL算法十分简单啊
str(i,s)爆搜s中的每个字符,完了
数据范围是<1000000 怎么看都不会超时。
然而
首先我翻了半天都不知道怎么Cpp转字符串
于是我可耻地抄了一个函数
1 #include<string> 2 #include<sstream> 3 4 string getstring (const int n) 5 { 6 stringstream newstr; 7 newstr<<n; 8 return newstr.str() 9 }
然而……这个函数效率似乎很低下
1 #include<iostream> 2 #include <string> 3 #include <sstream> 4 #include <stdlib.h> 5 using namespace std; 6 string getstring (const int n) 7 { 8 9 stringstream newstr; 10 newstr<<n; 11 return newstr.str(); 12 13 } 14 int main() 15 { 16 long long num=0; 17 int n,x; 18 string st; 19 string xx; 20 cin>>n>>x; 21 xx=getstring(x); 22 for (int i=1;i<=n;++i) 23 { 24 st=getstring(i); 25 int m=st.size(); 26 for (int j=0;j<=m-1;++j) 27 { 28 if (st[j]==xx[0]) ++num; 29 } 30 } cout<<num<<endl; 31 return 0; 32 }
这么简洁的式字在Luogu 上居然TLE4个点、、我本上跑1000000 4之类的点正好秒出,忘记NOIp官方平台什么鬼了。
测试点 #1:通过该测试点。 得分10,耗时0ms,内存2134kB。
测试点 #2:通过该测试点。 得分10,耗时0ms,内存2138kB。
测试点 #3:超过时间限制。 得分0,内存2109kB。
测试点 #4:通过该测试点。 得分10,耗时15ms,内存2138kB。
测试点 #5:超过时间限制。 得分0,内存2109kB。
测试点 #6:通过该测试点。 得分10,耗时811ms,内存2142kB。
测试点 #7:通过该测试点。 得分10,耗时0ms,内存2129kB。
测试点 #8:通过该测试点。 得分10,耗时748ms,内存2138kB。
测试点 #9:超过时间限制。 得分0,内存2105kB。
测试点 #10:超过时间限制。 得分0,内存2113kB。
只好写了个数学算法的、、依旧肉麻哦,值得期待。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int num=0; 6 int n,x; 7 cin>>n>>x; 8 for (int i=1;i<=n;++i) 9 { 10 if(i%10==x)num++; 11 if(i/10%10==x&&i>9) num++; 12 if(i/100%10==x&&i>99) num++; 13 if(i/1000%10==x&&i>999) num++; 14 if(i/10000%10==x&&i>9999) num++; 15 if(i/100000%10==x&&i>99999) num++; 16 } 17 cout<<num<<endl; 18 return 0; 19 }
麻不麻
嗯、还好吧
晚安呐、
『Luogu OJ』『C++』Level 1-3 循环!循环!循环!
标签:
原文地址:http://www.cnblogs.com/Catch-22/p/4649689.html