开始: 2024-04-21 14:30:00

20240421

结束: 2024-04-21 17:30:00
当前: 2025-0505-3131 11:50:12  类型:单人排位赛 状态:已经结束 

A-乘方

双重循环输出即可,乘方可以一边循环一边计算。注意输出的细节,每个符号两边都有空格。

#include<bits/stdc++.h>


using namespace std;
int main()
{
int n;
cin>>n;
for (int i = 1; i <= n; ++i)
{
int power = i;
for (int j = 1; j <= i; ++j) {
printf("%d ^ %d = %d ", i, j, power);
power *= i;
}
cout<<endl;
}
return 0;
}

B-运输次数

简单数学题,首先计算出y,然后y/c向上取整即可。注意数据范围,需要开long long。

#include<bits/stdc++.h>


using namespace std;
int main()
{
long long x,z;
cin>>x>>z;
long long y=x-2*z;
long long c;
cin>>c;
long long ans=ceil(1.0*y/c);
cout<<ans;
return 0;
}

C-连续自然数

#include<bits/stdc++.h>


using namespace std;
int n,sum,j;
int main()
{
cin>>n;
for(int i=1;i<=n/2;i++)
{
sum=0; //sum归零
for(j=i;j<n;j++) //枚举每一个i对应的j,这个j是最小的,从i加到j总和大于等于n的自然数
{
sum+=j; //sum记录从i加到j的总和
if(sum>=n)break; //当sum>=n时,跳出循环
}
if(sum==n)cout<<i<<' '<<j<<endl;
}
return 0;
}

D-津津的储蓄计划

根据题意模拟。

#include<bits/stdc++.h> 


using namespace std;
int sum,save;
int a,t;
int main()
{
for(int i=1;i<=12;i++)
{
sum+=300; //每个月的月初妈妈给津津300元钱
scanf("%d",&a);
if(a>sum) //预算>钱数
{
t=i;
break;
}
else //否则,总钱数减去当前预算
{
sum-=a;
if(sum>=100) //存钱
{
save+=sum/100*100;
sum%=100;
}
}
}
if(t) printf("-%d",t);
else printf("%.0f",sum+save*1.2);
return 0;
}

E-保龄球

该题目要求可以简单表述为,找到每个ai对应的i,如果这个ai不存在,则输出0.

当ai范围较小时,我们可以用桶的方法建立这个映射。但对于100%的数据,ai范围到了10^9,数组开不出来,故要使用别的方法。

第一种方法:结构体存储i和ai,根据ai排序,再使用二分查找找到对应的i。

第二种方法:自己用桶建立映射数组开不出来,但这个问题可以使用c++STL中的map简单解决。

在此给出第二种方法的代码:

#include<bits/stdc++.h>


using namespace std;
map<int,int>ma;
int n,a,q,m;
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d",&a);
ma[a]=i;
}
cin>>q;
for(int i=1; i<=q; i++)
{
scanf("%d",&m);
printf("%d\n",ma[m]);
}
}