洛谷CCF GESP C++ 二级上机题
标题先做做二级题找找手感
前三道之前做过了,直接做后面的了
B3837 [GESP202303 二级] 画三角形
秒了
#include<bits/stdc++.h>
using namespace std;
using ull=unsigned long long;
char next(char c)
{
if(c=='Z')
return 'A';
c+=1;
return c;
}
int main()
{
int n;
cin>>n;
char c1='A'-1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
cout<<next(c1);
c1=next(c1);
}
cout<<endl;
}
return 0;
}
B3840 [GESP202306 二级] 找素数
这题数据直接做就行,我想试试欧拉筛,可是莫名RE(T_T)
//欧拉筛做法
#include<bits/stdc++.h>
using namespace std;
using ull=unsigned long long;
int prime[1001];
bool num[1001];
int a,b;
void work()
{
int cnt;
for(int i=2;i<=1000;i++)
{
if(num[i]==false)
prime[++cnt]=i;
for(int j=1;j<=cnt&&i*prime[j]<=1000;j++)
{
num[i*prime[j]]=true;
if(i%prime[j]==0)
break;
}
}
return;
}
int main()
{
cin>>a>>b;
work();
int all=0;
for(int i=1;prime[i]!=0;i++)
{
if(prime[i]>=a&&prime[i]<=b)
all++;
}
cout<<all;
return 0;
}
常规法秒了
#include<bits/stdc++.h>
using namespace std;
using ull=unsigned long long;
int prime(int x)
{
if(x==2)
return 1;
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
return 0;
}
return 1;
}
int main()
{
int a,b;
cin>>a>>b;
int all=0;
for(int i=a;i<=b;i++)
{
if(prime(i))
all++;
}
cout<<all;
return 0;
}
B3841 [GESP202306 二级] 自幂数判断
同样秒了,没啥特殊的
#include<bits/stdc++.h>
using namespace std;
using ull=unsigned long long;
bool selfp(int x)
{
int s=0,w=0,n=x;
while(n)
{
w++;
n/=10;
}
n=x;
while(x)
{
int a=1;
for(int i=1;i<=w;i++)
{
a*=x%10;
}
s+=a;
x/=10;
}
return (n==s);
}
int main()
{
int m;
cin>>m;
for(int i=1;i<=m;i++)
{
int x;
cin>>x;
if(selfp(x))
cout<<"T"<<endl;
else
cout<<"F"<<endl;
}
return 0;
}
B3865 [GESP202309 二级] 小杨的 X 字矩阵
同样好做,我分成了三部分,上下两部分只是i的顺序反了一下
#include<bits/stdc++.h>
using namespace std;
using ull=unsigned long long;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n/2;i++)
{
for(int j=1;j<=n;j++)
{
if(j==i||j==n+1-i)
cout<<'+';
else
cout<<'-';
}
cout<<endl;
}
for(int j=1;j<=n;j++)
{
if(j==n/2+1)
cout<<'+';
else
cout<<'-';
}
cout<<endl;
for(int i=n/2;i>=1;i--)
{
for(int j=1;j<=n;j++)
{
if(j==i||j==n+1-i)
cout<<'+';
else
cout<<'-';
}
cout<<endl;
}
return 0;
}
B3866 [GESP202309 二级] 数字黑洞
这题也简单,开始没给cnt赋值,运行时错误,给cnt赋值为0后ac
#include<bits/stdc++.h>
using namespace std;
using ull=unsigned long long;
int a[5];
int dis(int x)
{
int cnt=0;
while(x)
{
a[++cnt]=x%10;
x/=10;
}
sort(a+1,a+1+3);
int ma,mi;
ma=a[3]*100+a[2]*10+a[1];
mi=a[1]*100+a[2]*10+a[3];
return ma-mi;
}
void work(int x)
{
int all=0,now;
now=x;
while(now!=495)
{
all++;
now=dis(now);
}
cout<<all;
return;
}
int main()
{
int n;
cin>>n;
work(n);
return 0;
}
还有两道入门今天不想做了qwq。