• 一些并不高深但对我固有思维不同的细节(更新中)



    1.字符统计:一串字符统计其字符数量,不含空格换行。
    注意EOF的使用(怕不是因为OJ,我现在可能都不知道EOF是什么鬼),以及getchar()的特性。

    #include <stdio.h>
    
    int main()
    {
    int num; 
    char c;
    
    while (1) {
    c = getchar();
    if (c == EOF) break;
    if (c != ' ' && c != '
    ')
    num++;
    }
    printf("%d
    ", num);
    
    return 0;
    
    }
    View Code

    2.字符串比较大小
    这个函数接受两个字符串 s1,s2。这些字符串只能由小写字母组成,并且具有相同的长度。这个函数的输出是另一个长度与 s1,s2 相同的字符串 g。g 的第 i 个字符等于 s1 的第i 个字符和 s2 的第 i 个字符的最小值,简单来说,g[i]=min(s1[i],s2[i])。(详见洛谷)
    注意在字符串的题目中,末尾记得加‘’否则……

     1 #include <stdio.h>
     2 int main()
     3 {
     4 char s1[103],s2[103],g[103];
     5 int len=0,i=0;
     6 scanf("%d",&len);
     7 
     8 scanf("%s",s1);
     9 scanf("%s",s2);
    10 
    11 for(i=0;i<len;i++)
    12 {
    13 if(s1[i]>s2[i])
    14 {
    15 g[i]=s2[i];
    16 
    17 }
    18 if(s1[i]<s2[i])
    19 {
    20 break;
    21 }
    22 if(s1[i]==s2[i])
    23 {
    24 g[i]='z'; 
    25 }
    26 }
    27 if(i==len)
    28 {
    29 g[i]='';
    30 printf("%s",g);
    31 }
    32 else
    33 printf("-1");
    34 return 0;
    35 }
    View Code

    ```
    3.阶梯计费及四舍五入

    月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。
    输入格式:

    输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。

    输出格式:

    输出一个数,保留到小数点后1位(单位以元计,保留到小数点后1位)

    这道题做出大框架非常简单,但似乎四舍五入时出了一点问题,在没有做到这题以前,好像老师上课有教过怎么四舍五入,可惜没印象了,毕竟是老师单方面灌输的,事实上就是我只记得自己学的内容,考试也是凭着自己学的那点东西水过去的。

    ```

     1 #include<stdio.h>
     2 #define A 0.4463
     3 #define B 0.4663
     4 #define C 0.5663
     5 
     6 int main()
     7 {
     8 double total=0,p1=0,p2=0,p3=0;
     9 int used=0;
    10 
    11 scanf("%d",&used);
    12 
    13 if(used>=401)
    14 {
    15 p1=150;
    16 p2=250;
    17 p3=used-p1-p2;
    18 }
    19 else if(used>=151)
    20 {
    21 p1=150;
    22 p2=used-p1;
    23 }
    24 else if(used>0)
    25 {
    26 p1=used;
    27 }
    28 total=p1*A+p2*B+p3*C;
    29 total=int((total*10)+0.5)/10.0;
    30 
    31 printf("%.1lf",total);
    32 return 0;
    33 }
    34 ```
    35 不要问我怎么想起来要四舍五入的,因为我现在遇到OJ的题目基本上一遍过不了,试了几次就看题解,在题解里惊讶地发现,我去,还要四舍五入,我就直接%.1f了
    36 下面划重点,如何四舍五入!!!(我是真的鶸鶸)
    37 
    38 ```
    39 total=int((total*10)+0.5)/10.0;
    View Code

    4.超时问题
    我还是第一次遇到TLE。
    这一题也是上手很快,拿着草稿纸就写下了源码,结果敲到IDE里的时候,输入了样例,回车,光标静静地闪动,我又换了一个IDE,依然如此。我感觉是IDE有病,就直接提交到OJ,显示8个TLE,2个AC。。。

    **这是时间复杂度贼高,算法水平无比落后的最初的想法orz。**

     1 ```
     2 #include<stdio.h>
     3 int main()
     4 {
     5 int M = 0, N = 0, box = 0, beg;
     6 int num[10], bit = 0, temp = 0;
     7 scanf("%d%d", &M, &N);
     8 for (int i = 0; i < 10; i++)
     9 {
    10 num[i] = 0;
    11 }
    12 for (beg = M; beg <= N; beg++)
    13 {
    14 if (beg < 10)
    15 {
    16 num[beg]++;
    17 }
    18 else
    19 {
    20 box = beg;
    21 while (beg > 0)
    22 {
    23 beg = beg / 10;
    24 bit++;
    25 }
    26 for (int i = 0; i <= bit; i++)
    27 {
    28 temp = box % 10;
    29 num[temp]++;
    30 box = box / 10;
    31 }
    32 }
    33 }
    34 printf("%d %d %d %d %d %d %d %d %d %d
    ", num[0], num[1], num[2], num[3], num[4], num[5], num[6], num[7], num[8], num[9]);
    35 return 0;
    View Code

    ```
    关键是看起来好像自己还挺会使用for循环的样子结果输出却不知道要用循环,直接来一段暴力%d%d%d%d%d%d%d%d%d%d,醉了

    下面是AC代码

    ``

     1 int main()
     2 {
     3 int M=0,N=0,box=0,beg;
     4 int num[10];
     5 scanf("%d%d",&M,&N);
     6 memset(num,0,sizeof(num));//参考洛谷题解orz学到了
     7 
     8 for(beg=M;beg<=N;beg++)
     9 {
    10 box=beg;
    11 while(box>0)
    12 {
    13 int x=box%10;
    14 num[x]++;
    15 box=box/10;
    16 
    17 }    
    18 
    19 } 
    20 printf("%d %d %d %d %d %d %d %d %d %d
    ",num[0],num[1],num[2],num[3],num[4],num[5],num[6],num[7],num[8],num[9]);
    21 return 0;
    22 }
    View Code


    ```
    再画个重点,数组一定要记得初始化,不然没有没有被赋值就是奇奇怪怪的数字了hhh
    简单又装b的初始化数组技巧,感谢洛谷大佬..、

    .` memset(num,0,sizeof(num));`

     5.

    题目描述1-洛谷
    经历千辛万苦,他收集了连续N(1<=N<=10^7)天的最高气温数据。

    现在,他想知道最高气温一直上升的最长连续天数。

    输入输出格式
    输入格式:
    *1行:一个整数N。1<=N<=10^7

    *2行:N个空格隔开的整数,表示连续N天的最高气温。0<=最高气温<=10^9。

    输出格式:
    *1行:一个整数,表示最高气温一直上升的最长连续天数。
    第一遍,1AC其他TLE
    超高校级的时间复杂度加数组哭泣

     1 #include <stdio.h>
     2 int main()
     3 {
     4     long long i, days, cnt=1,weather[10000000],box[10000000];
     5     for (i = 0; i < days; i++)
     6     {
     7         box[i] = 0; 
     8         scanf_s("%lld", &weather[i]);
     9     }
    10 
    11     for (i = 0; i < days-1; i++)
    12     {
    13         if (weather[i] < weather[i + 1])
    14             cnt++;
    15         else
    16         {
    17             box[i] = cnt;
    18             cnt = 1;
    19         }
    20     }
    21     cnt = box[0];
    22     for (i = 1; i < days; i++)
    23     {
    24         if (box[i] > cnt)
    25         {
    26             cnt = box[i];
    27         }
    28     }
    29 
    30     printf("%lld", cnt);
    31     return 0;
    32 }
    View Code

    第二个AC代码

    L1-003 个位数统计 (15 point(s))

    给定一个 k 位整数 1 (0, ,, dk1​​>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 0,则有 2 个 0,3 个 1,和 1 个 3。

    这题一开始。。。我想都没想,直接来了一个

    很显然...自己用几个数测试一下就是溢出了23333

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<iomanip>
    #include<string>
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    #include <memory.h>
    #include <stdlib.h> 
    
    using namespace std;
    int main()
    {
        unsigned long long x;
        while(scanf("%llu",&x)!=EOF)
        {
    
            int cnt[11];
            bool vis[11];
            memset(cnt,0,sizeof(cnt));
            memset(vis,false,sizeof(vis));
            int t;
            
            while(x>0)
            {
                cnt[x%10]++;
                vis[x%10]=true;
                x=x/10;
            }
            
            for(int i=0;i<=9;i++)
            {
                if(vis[i])
                printf("%d:%d
    ",i,cnt[i]);
            }
        }
    }
    View Code

    所以改成读取字符串,读一个,加一个。

    关于大素数小区间的新方法:不用打表,不用埃氏筛。

    http://www.gonglin91.com/2018/10/14/big-prime/

    、、、

  • 相关阅读:
    XSS漏洞学习笔记
    【react】使用 create-react-app 构建基于TypeScript的React前端架构
    React-使用装饰器
    探究Hybrid-APP技术原理
    getBoundingClientRect使用指南
    React.js + LiveReload配置详解
    《高性能JavaScript》学习笔记(2)——日更中
    JavaScript设计模式学习之路——继承
    JavaScript数组去重的四种方法
    《高性能JavaScript》学习笔记——日更中
  • 原文地址:https://www.cnblogs.com/greenaway07/p/10478875.html
Copyright © 2020-2023  润新知