这次题目都挺简单的,只是为了让你们关注模拟题而已。
A.签到题,没什么好说的,注意细节就行。
代码:
#include<stdio.h>
int main(void)
{
for(int i=0;i*5<=100;i++)
{
for(int j=0;j*3+i*5<=100;j++)
{
int k=100-i-j;
if(k%3==0&&i*5+j*3+k/3==100)
{
printf("%d %d %d\n",i,j,k);
}
}
}
return 0;
}
B.相比A题稍微难了一点,不过题面有提示,只要再递推过程中取模即可。
代码
#include<iostream>
#define number 1000100
using namespace std;
const int mod=10007;
typedef long long ll;
ll fibonaci[number];
int main(void)
{
ll n;
cin>>n;
ll i;
fibonaci[1]=1;
for(i=2;i<=n;i++)
{
fibonaci[i]=fibonaci[i-1]%mod+fibonaci[i-2]%mod;
}
cout<<fibonaci[n]%mod<<endl;
return 0;
}
C.这题是为了让你们认识杨辉三角打表这个方法。在求组合数的时候经常用到。
代码:
#include<stdio.h>
typedef long long int ll;
int main(void)
{
ll C[36][36]={0};
C[0][0]=1;
int i,j;
for(i=1;i<=34;i++)
{
C[0][i]=1;
for(j=1;j<=i;j++)
{
C[j][i]=C[j-1][i-1]+C[j][i-1];
}
}
int n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
printf("%lld",C[j][i]);
if(j<i)
{
printf(" ");
}
else
{
printf("\n");
}
}
}
return 0;
}
D.简单的模拟,注意特判该店是否为最后一家店,从左往右扫描一遍店铺的同时更新beauty-max值和钱数sum。
代码
#include<stdio.h>
int min(int a,int b)
{
if(a>=b)
{
return b;
}
else
{
return a;
}
}
int main(void)
{
int n;
long long int sum;
int beamax;
int price[100100];
int beauty[100100];
scanf("%d",&n);
int i,j;
for(i=0;i<n-1;i++)
{
scanf("%d",&price[i]);
}
for(i=0;i<n-1;i++)
{
scanf("%d",&beauty[i]);
}
sum=price[0];
beamax=beauty[0];
i=1;
while(i<n-1)
{
if(beauty[i]>beamax)
{
if(i<n-2)
{
if(beauty[i]>beauty[i+1])
{
sum+=price[i];
beamax=beauty[i];
}
else if(beauty[i]==beauty[i+1])
{
sum+=min(price[i],price[i+1]);
beamax=beauty[i];
}
else
{
sum+=price[i+1];
beamax=beauty[i+1];
}
i+=2;
}
else
{
sum+=price[i];
beamax=beauty[i];
i++;
}
}
else
{
i++;
}
}
printf("%lld\n",sum);
return 0;
}
E.模拟题,只需关注rating改变前后是否改变称号即可,用一个常量字符串数组来保存称号,其判断称号的操作可以封装为函数,不过我直接复制粘贴了,懒得去改( ̄︶ ̄)↗
顺便一提,目前rating世界榜一的T神前天上4000分的时候寄了😶
代码:
#include<stdio.h>
#include<string.h>
char level[15][50]={"Legendary grandmaster","International grandmaster","Grandmaster","International master","Master","Candidate master","Expert","Specialist","Pupil","Newbie"};
int main(void)
{
int T;
scanf("%d",&T);
while(T--)
{
int n,k;
scanf("%d%d",&n,&k);
char cmp[50];
if(k>=3000)
{
strcpy(cmp,level[0]);
}
else if(k>=2600)
{
strcpy(cmp,level[1]);
}
else if(k>=2400)
{
strcpy(cmp,level[2]);
}
else if(k>=2300)
{
strcpy(cmp,level[3]);
}
else if(k>=2100)
{
strcpy(cmp,level[4]);
}
else if(k>=1900)
{
strcpy(cmp,level[5]);
}
else if(k>=1600)
{
strcpy(cmp,level[6]);
}
else if(k>=1400)
{
strcpy(cmp,level[7]);
}
else if(k>=1200)
{
strcpy(cmp,level[8]);
}
else
{
strcpy(cmp,level[9]);
}
while(n--)
{
char get[50]={0};
int a;
scanf("%d",&a);
k=k+a;
if(k>=3000)
{
strcpy(get,level[0]);
}
else if(k>=2600)
{
strcpy(get,level[1]);
}
else if(k>=2400)
{
strcpy(get,level[2]);
}
else if(k>=2300)
{
strcpy(get,level[3]);
}
else if(k>=2100)
{
strcpy(get,level[4]);
}
else if(k>=1900)
{
strcpy(get,level[5]);
}
else if(k>=1600)
{
strcpy(get,level[6]);
}
else if(k>=1400)
{
strcpy(get,level[7]);
}
else if(k>=1200)
{
strcpy(get,level[8]);
}
else
{
strcpy(get,level[9]);
}
if(strcmp(cmp,get)!=0)
{
printf("%s -> %s\n",cmp,get);
strcpy(cmp,get);
}
}
printf("%s\n",cmp);
}
return 0;
}