学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年CSP-J初赛真题解析 | 汇总_热爱编程的通信人的博客-CSDN博客
(快速幂)请完善下面的程序,该程序使用分治法求 x p m o d m x^p\ mod\ m xp mod m的值。
输入:三个不超过10000的正整数x,p,m。
输出: x p m o d m x^p\ mod\ m xp mod m的值。
提示:若p为偶数, x p = ( x 2 ) p / 2 x^p=(x^2)^{p/2} xp=(x2)p/2;若p为奇数, x p = x ∗ ( x 2 ) ( p − 1 ) / 2 x^p=x*(x^2)^{(p-1)/2} xp=x∗(x2)(p−1)/2。
#include <iostream>
using namespace std;
int x, p, m, i, result;
int main() {
cin >> x >> p >> m;
result = __1__;
while (__2__) {
if (p%2==1)
result = __3__;
p /= 2;
x = __4__;
}
cout << __5__ << endl;
return 0;
}
第27题
1处应该填( )
【答案】:1
【解析】
乘法的累乘器初始值为1
第28题
2处应该填( )
【答案】:p>0
【解析】
按照快速幂的公式,最后一个数算到1次方
第29题
3处应该填( )
【答案】:result*x%m
【解析】
如果是奇数,需要保留底数
第30题
4处应该填( )
【答案】:x*x%m
【解析】
最后一定会有个数的1次方出现,所以这里只是x*x%m
第31题
5处应该填( )
【答案】:result
【解析】
仅需输出答案
(切割绳子)有n条绳子,每条绳子的长度已知且均为正整数。绳子可以以任意正整数长度切割,但不可以连接。现在要从这些绳子中切割出m条长度相同的绳段,求绳段的最大长度是多少。
输入:第一行是一个不超过100的正整数n,第二行是n个不超过 1 0 6 10^6 106的正整数,表示每条绳子的长度,第三行是一个不超过 1 0 8 10^8 108的正整数m。
输出:绳段的最大长度,若无法切割,输出Failed。
#include <iostream>
using namespace std;
int n, m, i, lbound, ubound, mid, count;
int len[100]; // 绳子长度
int main()
{
cin >> n;
count = 0;
for (i=0; i<n; i++)
{
cin >> len[i];
__1__;
}
cin >> m;
if (__2__)
{
cout << "Failed" << endl;
return 0;
}
lbound = 1;
ubound = 1000000;
while (__3__)
{
mid = __4__;
count = 0;
for (i=0; i<n; i++)
__5__;
if (count < m)
ubound = mid - 1;
else
lbound = mid;
}
cout << lbound << endl;
return 0;
}
第32题
1处应该填( )
【答案】:count += len[i]
【解析】
计算所有线段的总长
第33题
2处应该填( )
【答案】:count<m
【解析】
如果所有线段加起来的总长度小于m,那么即使按照最小的长度1来切割,也无法切出m段
第34题
3处应该填( )
【答案】:lbound<ubound
【解析】
l和r重合时才退出循环
第35题
4处应该填( )
【答案】:(lbound+ubound+1)/2
【解析】
如果l=3,r=4,且3就是正解,那么应该希望mid = 4,否则就会陷入死循环
第36题
5处应该填( )
【答案】:count += len[i]/mid
【解析】
计算在mid长度下可以切出的总段数
标签:__,count,27,正整数,初赛,答案,长度,解析,CSP From: https://blog.csdn.net/guolianggsta/article/details/143107666