目录:
题目:
各题题意:
奇数
给出一个区间,求这其中的奇数个数
求和
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;
}