lab3 2021.10.9
使用参考书为学校配套使用上机指导书
一、求a+aa+aaa+…+aaaa..aa(n个a)之和
本题要注意的就是题目没有说明a的输入范围,因此要考虑多位情况。如何得到a的位数可参考示例代码,可以用本次上课学的循环语句计算,也可用已有数学知识直接调用函数计算。
另一点就是计算加和的方法。这个可以用示例代码中每次for循环一遍重新计算加数再加到sum
中的方法,也可定义一个加数变量tmp
保存每次的加数值从而减少计算。
本题逻辑较简单想明白就可以了。其他要注意的可能是计算幂次时不能直接用^
符号,^
符号在c++中是一个逻辑运算符,需要调用pow()
函数。
#include<iostream>
using namespace std;
int main(){
int a,n,sum,count,temp;
cout << "Input a,n: ";
cin >> a >> n;
count = 1; //或者用 n = log10(a) + 1; 可以直接得到位数。(可能需cmath库)
temp = a/10;
while(temp!=0){
count++;
temp /= 10;
} //得到a的位数
// 按照前后项的顺序对算式进行求和
sum = 0;
for(int i=1; i<=n; i++)
for(int j=0; j<i; j++)
sum += a*pow(10,count*j);
cout << "Sum=" << sum << endl;
}
二、求阶乘和
看示例代码应该能够明白。没有什么需要注意的点。(可能要注意初始化?)
//本代码来自某同学
#include<iostream>
using namespace std;
int main()
{
int product,sum; //定义存储变量
sum=0; //初始化,也可在定义时做
product=1;
for (int i=1;i<=10;++i){ //循环十次
product*=i;
sum+=product;
}
cout<<sum<<endl;
return 0;
}
附加一、计算零钱方法数
本题虽然是附加题,但相对于前两道题其实并不困难,写代码前想明白怎么写逻辑就行。这里本质还是枚举法,把所有情况枚举一遍,检查所有零钱加起来的价值是否等于需要的价值即可。
看明白示例代码就行。
//本代码同样来自某同学...代码写的挺清楚好看的...
#include<iostream>
using namespace std;
int main()
{
int change,Methods; //定义零钱数、方法数
cout<<"Input the change:";
cin>>change;
Methods=0; //初始化
for (int i=1;i<=change/5;++i){ //要求每种零钱要有一个,因此从1开始循环。
for (int j=1;j<=change/2;++j){
for (int k=1;k<=change;++k)
if (i*5+j*2+k==change) //判断条件,若相等说明此种分配满足,方法数加一
++Methods;
}
}
cout<<"Methods="<<Methods<<endl;
return 0;
}
//测试数据:输入50,输出应为106