• 『Luogu OJ』『C++』Level 1-3 循环!循环!循环!


    关卡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 }

    麻不麻

    嗯、还好吧

    晚安呐、

  • 相关阅读:
    C# 特性(Attribute)学习
    ASP.NET Request.MapPath() 与 Server.MapPath()
    Asp.net对http request 处理的全过程!
    保存网址
    寻找silverlight高手帮忙解决问题,谢谢,
    基于.Net Framework的N层分布式应用开发
    VB.NET 代码转为C#
    刚刚开通博客噢 。欢迎大家光临啊
    配置本地服务器的几种方式
    前端必备工具 (记录)
  • 原文地址:https://www.cnblogs.com/Catch-22/p/4649689.html
Copyright © 2020-2023  润新知