1-1打印沙漏
开始想开方求最多打出的符号数,后来发现浮点转整好麻烦,还是循环
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j=1,x=0,y=0,rest,n;
char ch;
scanf("%d %c",&n,&ch);
while(2*j*j-1<=n)j++;
j--;
y=2*j-1;
rest=n-2*j*j+1;
while(y>0){
for(i=0;i<x;i++)cout<<' ';
for(i=0;i<y;i++)cout<<ch;
cout<<endl;
x++,y-=2;
}
x--,y+=2;
while(x>0){
x--,y+=2;
for(i=0;i<x;i++)cout<<' ';
for(i=0;i<y;i++)cout<<ch;
cout<<endl;
}
cout<<rest;
return 0;
}
1-2素数对猜想
欧拉筛筛一下素数,遍历即可
#include<bits/stdc++.h>
using namespace std;
bool st[100010];
int primes[100010],cnt,ans;
int main(){
int n;cin>>n;
memset(st,1,sizeof(st));
st[1]=0;
for(int i=2;i<=n;i++){
if(st[i])primes[cnt++]=i;
for(int j=0;primes[j]*i<=n && j<cnt;j++){
st[primes[j]*i]=0;
if(i%primes[j]==0) break;
}
}
for(int i=0;i<cnt-1;i++){
if(primes[i+1]-primes[i]==2)ans++;
}
cout<<ans;
return 0;
}
1-3数组元素循环右移问题
数据有点拉 直接模拟(m最好还是模下n把)
#include<bits/stdc++.h>
using namespace std;
int n,m,a[110];
void f(){
int x=a[n-1];
for(int i=n-1;i>0;i--){
a[i]=a[i-1];
}
a[0]=x;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=0;i<m;i++)f();
for(int i=0;i<n-1;i++)cout<<a[i]<<' ';
cout<<a[n-1];
return 0;
}
1-4 Have Fun with Numbers
sb题目 20bit 开__int128(一些版本没有,不嫌麻烦贴一个高精)
注意__int128要用快读快写读入输出,下面懒得改了
#include<bits/stdc++.h>
using namespace std;
__int128 x;
int a[10];
int main(){
while(cin>>x){
bool flag=1;
memset(a,0,sizeof(a));
__int128 temx=x,temy=2*x;
while(temx){a[temx%10]++;temx/=10;}
while(temy){a[temy%10]--;temy/=10;}
if(a[0])flag=0;
for(int i=1;i<10;i++)if(a[i]!=0)flag=0;
if(flag)cout<<"Yes"<<endl<<2*x<<endl;
else cout<<"No"<<endl<<2*x<<endl;
}
return 0;
}
1-5Shuffling Machine
模拟题 另一种解法打表写出所有牌 (注意格式)
#include<bits/stdc++.h>
using namespace std;
int main(){
int s[54];
int i,k;cin>>k;
int card1[54],card2[54],*result;
result=k%2==0 ? card1 : card2;
for(i=0;i<54;i++)cin>>s[i];
for(i=0;i<54;i++)card1[i]=i;
while(k){
for(i=0;i<54;i++)card2[s[i]-1] = card1[i];
k--;
if(k==0)break;
for(i=0;i<54;i++)card1[s[i]-1] = card2[i];
k--;
}
for(i=0;i<54;i++){
if(result[i]/13==0)printf("%c%d",'S',result[i]%13+1);
else if(result[i]/13==1)printf("%c%d", 'H',result[i]%13+1);
else if(result[i]/13==2)printf("%c%d", 'C',result[i]%13+1);
else if(result[i]/13==3)printf("%c%d", 'D',result[i]%13+1);
else printf("%c%d", 'J',result[i]%13+1);
if(i<53)cout<<" ";
}
return 0;
}