20240421
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]);
}
}