第二周总结

这周我分享一下我在洛谷发现的两道很有意思的题。(虽然是两大水题,但能做出来我感觉还是很开心,嘻嘻)
第一题
题目
初看这道题感觉妙的很,静下心来分析题意后才知道原来只需要用到循环计数加一个取反就好了。

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int f=0,con=0;
    int a;
    while(~scanf("%d",&a))//这个无限输入简直不要太好用!!!
        {
            for(int i=0;i<a;i++)
            {
                printf("%d",f);
                con++;    //用来换行,一维数组强行变成二维数组
                if(con==n)
                {
                    con=0;
                    printf("\n");
                }
            }
            f=!f;       //取反0变1,1变0,当时一直没想到用这个方法可以
        }
        return 0;
}

第二题和这题很类似很类似。
题目二
有了上一道题,这道题就好理解很多了。不过我当时想的太简单了…以为也只要for循环加遍历就好了,但是好像不大行,于是…

#include<stdio.h>
#include<string.h>
char text[40002]={0},str[202];//一开始我数组开小了,200×200算成4000了,然后就有三个数据过不了,我还以为是程序的问题,又死活找不出来。。。
int main()
{
    char flag;
    int i;
    int sum=0;
    scanf("%s",str);
    int len=strlen(str);
    strcat(text,str); //这个好妙,就是把二维数组变成一维数组,这样遇到换行也不怕了(拿小本本记下)
    for(i=2;i<=len;i++)
    {
        scanf("%s",str);
        strcat(text,str);
    }
    int len2=strlen(text);
    printf("%d ",len);
    for( i=0,sum=0,flag='0';i<=len2;i++) //注意是flag='0'而不是等于0
        if(text[i]==flag) sum++;
        else
        {
            flag=text[i];   //这里不能用取反,像上题f=!f一样了,因为这是字符'0'或'1'。
            printf("%d ",sum);
            sum=1;      //注意置1
        }
    return 0;
}

完美解决,虽然过程有些许坎坷。。。

做完这两道题感觉好像有点进入状态了,之前一直感觉浑浑噩噩的,现在还要求交做题数,就感觉是对我这种自制力差的人的一种鞭策,加油!

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页