2018.3.24 水题合集(奇数、求和、圆环、旋转)

29 篇文章 0 订阅
23 篇文章 0 订阅

目录:

题目:

奇数 题目
求和 题目
圆环 题目
旋转 题目

各题题意:

奇数

给出一个区间,求这其中的奇数个数

求和

1~n这些数中,即可以通过+、-运算得到s,且n为最小,求n

圆环

给出每个圆环的半径,求他们转圈的比例(要求最简)

旋转

给出一个原始的正方形,求在每次旋转(90°)后,总共叠加的黑色方块数

各题分析

奇数

这题嘛,本身就很简单,而且数据又小,所以枚举、数论都可以AC

求和

我们可以先求出n,再枚举要将哪几个数变成负数。
值得注意的是变成负数=减去两个相同的数

圆环

这题简直了,单纯求出最大公约数,然后一起除,最后输出就可以了

旋转

这道题,主要是需要找到规律,其实我们不难发现:每次旋转后的方块,相当与上次的对应列从下之上。
这里写图片描述等同于这里写图片描述
这下我们就非常好做了,只要将程序分成四块,每次做完后输出就好了

AC后感想:

感觉是小学组前两题,然后被AJ扣了下来。。。

各题代码:

说明:

因为有点水,而且算法基本都是暴力+数论,所以就不加解释啦

奇数代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
inline LL read() {
    LL d=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
    return d*f;
}
int x[40001];
int main()
{
    int a=read(),b=read();
    int i=a;
    int ans=0;
    if(abs(i)%2==0) i++;
    while(i<=b)
    {
        x[++ans]=i;
        i+=2;
    }
    printf("%d\n",ans);
    for(int j=1;j<=ans;j++) printf("%d\n",x[j]);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

求和代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
inline LL read() {
    LL d=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
    return d*f;
}
int x[100001];
int main()
{   int n=read();
    int ans=0;
    int s=0;
    while(s<n)
    {
        ans++;
        s+=ans;
    }
    int a,tf=0,g=0,m;
    while(tf==0)
    {
        a=s-n;
        if(a%2==0)
        {
            a/=2;
            m=a;
            g=0;
            for(int i=ans;i>=1;i--)
              {
                if(m>=i) 
                  {
                    m-=i;
                    x[++g]=i;
                  }
                if(m==0) break;
              }
            if(m==0) break;
        }
        ans++;
        s+=ans;
    }
    printf("%d\n",ans);
    for(int i=g;i>0;i--) printf("%d\n",x[i]);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

圆环代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
inline LL read() {
    LL d=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
    return d*f;
}   
int gf(int x,int y)
{
    int j=x%y;
    while(j!=0)
    {
        x=y;
        y=j;
        j=x%y;
    }
    return y;
}
int main()
{
    int n=read();
    int a=read(),d;
    int b,c;
    for(int i=2;i<=n;i++)
    {
        d=a;
        b=read();
        while(gf(a,b)!=1)
        {
          c=gf(a,b);
          a/=c;b/=c;
        }
        printf("%d/%d\n",a,b);
        a=d;
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}

旋转代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
inline LL read() {
    LL d=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
    return d*f;
}
char c;
int t[51][51],p[51][51];
int main()
{
    int n=read(),ans=0;
    for(int i=1;i<=n;i++) 
    {
        for(int j=1;j<=n;j++)
          c=getchar(),t[i][j]=c-'0',ans+=t[i][j];
        c=getchar();
    }
    printf("%d\n",ans);

    ans=0;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        p[i][j]=t[n-j+1][i];
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        t[i][j]=t[i][j]||p[i][j],ans+=t[i][j];
    printf("%d\n",ans);

    ans=0;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        p[i][j]=t[n-j+1][i];
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        t[i][j]=t[i][j]||p[i][j],ans+=t[i][j];
    printf("%d\n",ans);

    ans=0;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        p[i][j]=t[n-j+1][i];
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        t[i][j]=t[i][j]||p[i][j],ans+=t[i][j];
    printf("%d\n",ans);
    fclose(stdin);
    fclose(stdout);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值