Kausal爬楼梯
这种题目应该很熟悉了吧,就是一个素数筛法和前缀和的应用。
#include <stdio.h>
#include <math.h>
#include <string.h>
#define ll __int64
#define NUM 1000005
int p[NUM];
ll sum[NUM];
void Prime(){
int cnt=1;
for(int i=2;i<NUM;i++){
if(!p[i]){
sum[cnt]=sum[cnt-1]+i;
cnt++;
for(int j=i+i;j<NUM;j+=i){
p[j]=1;
}
}
}
}
int main(){
int t;
scanf("%d",&t);
Prime();
while(t--){
int n;
scanf("%d",&n);
printf("%I64d\n",sum[n]);
}
return 0;
}
Eletronic Palse
这个题目也很容易,是一个签到题。
#include <stdio.h>
#include <math.h>
#include <string.h>
#define ll __int64
int a[1005],b[1005];
int gcd(int x,int y){
return y?gcd(y,x%y):x;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m;
scanf("%d%d",&n,&m);
int sum=0,idx=0,tmp=0;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int j=0;j<m;j++) scanf("%d",&b[j]);
for(int i=0;i<n;i++){
//用最小公倍数来弄哦
int d=n*m/gcd(n,m);
for(int j=0;j<d/n;j++){
tmp=a[i]+b[(i+j*n)%m];
if(tmp>sum){
sum=tmp;
idx=i+j*n;
}
else if(tmp==sum){
if(i+j*n<idx) idx=i+j*n;
}
}
}
printf("%d %d %d %d\n",idx,sum,a[idx%n],b[idx%m]);
}
return 0;
}
数字塔
#include <stdio.h>
#include <math.h>
#include <string.h>
#define ll __int64
int main(){
int n,cnt=0;
while(scanf("%d",&n)!=EOF && n){
cnt++;
printf("case %d:\n",cnt);
for(int i=1;i<=n;i++){
//空格
for(int j=i;j<n;j++) printf(" ");
//数字
for(int j=1;j<=i*2-1;j++) printf("%d",i);
printf("\n");
}
}
return 0;
}