学习c++的第一次实验课
布置了两个小编程题
1.1Vedic Square and Vedic Star
(1)问题描述
Vedic Square(吠陀方形)是一个来源于古印度的数学问题,是一个9×9的表,与九九乘法表类似。只是表的每个格不是行列序号的乘积,而是乘积的数字根。数字根(Digital Root)就是把一个数的各位数字相加,再将所得数的各位数字相加,直到所得数为一位数字为止。而这个一位数便是原来数字的数字根。适用范围为正整数和零。例如:
1的数字根为1
10的数字根为1(1+0=1)
21的数字根为3(2+1=3)
48的数字根为3(4+8=12,1+2=3)
198的数字根为9(1+9+8=18,1+8=9
注意:任何数加9的数字根还是它本身;9乘任何数字的数字根都是9。
下图是Vedic Square。
(2)Vedic Star
吠陀方形中有许多几何模式及对称特性。把某个特定的数字用星号替换,其它数字用空格替换,你会发现Vedic Square里呈现出一些对称的图形。
(3)编写程序
请编写程序实现打印Vedic Square,然后打印出每个数字(1~9)的Vedic Star图形。比如下面3个图形分别对应数字1,2,3。
题目比较长 但是思路很简单
定义一个number(int k)函数
功能是判断一个数k的数字根是几
首先判断是否大于等于10 各位相加 得出一个数来 在判断此数是否大于10 若大于则递归调用number函数
int number(int k)//k=i*j
{
int sum = 0;
int base=10;
if (k < 10)//若小于10 直接返回数字根
return(k);
else//大于等于10
{
while (k>0)//各位相加
{
sum += k % base;//膜10得末尾一个数
k /= base;//除以10切去末尾 直到k>0
}
if (sum >= 10)//如果得到的sum依然是二位数
{
number(sum);//递归调用number()
}
else
{
return(sum);//反之返回sum即为数字根
}
}
依次打印9张图,总不能写九遍代码,所以写一个子函数print(int i)
功能就是i=1~9 依次打印数字跟是1 ~9的星图
void print(int num)//在main函数中写一个循环 调用print函数9次
{
int i = 0, j;
for (j = 0; j <= 9; j++)//打印首行
{
cout << j << " ";
}
cout << endl;
for (i = 1; i <= 9; i++)
{
cout << i << " ";//打印首列
for (j = 1; j <= 9; j++)
{
if (number(i * j) == num)//是数字根的输出*
cout << "*" << " ";
else
cout << " " << " ";//不是的输出空格
}
cout << endl;
}
}
主函数的功能就很简单了 只要输出数字根表就好啦
int main()
{
int num;
int i=0, j;
for (j = 0; j <= 9; j++)//大体写法和print函数一样
{
cout << j <<" ";
}
cout << endl;
for (i = 1; i <= 9; i++)
{
cout << i << " " ;
for (j = 1; j <= 9; j++)
{
cout << number(i * j) << " " ;//只输出数字根 不需要判断
}
cout << endl;
}
for (num = 1; num <= 9; num++)
{
cout <<"------------------------------------------"<< endl;//间隔一下嘛
print(num);
}
return 0;
}
4.2 电梯
(1)问题描述
有个电梯接到指令,要依次去往N个楼层。电梯上升一层需要6秒,下降一层需要4秒,在到达的楼层停5秒。
给定一个停靠楼层序列,你来计算总共需要花费的时间。电梯初始位置是第0层,而且执行完这个序列后电梯呆在原地,不需要返回到第0层。
(2)输入
输入一条序列,一共N+1个自然数,第一个数代表后面需要停靠楼层数量,然后是这N个楼层的数字。
(3)输出
打印出电梯停靠完这条序列的楼层花费的总时间。
(4)示例输入和输出
输入为:
1 2
输出为:
17
因为 (6 * 2 + 5)
输入为:
3 2 3 1
输出为:
41
因为:
(6 * 2 + 5 + 6 * 1 + 5 + 4 * 2 + 5)
这个题特别简单哈哈哈,贴一下代码了
#include <iostream>
using namespace std;
int main()
{
int num,k = 1;
int elevator[10];
cin >> num;
for (int i = 0; i < num; i++)
cin >> elevator[i];
int result = 5 * num+elevator[0]*6;
while (k<=num-1)
{
if(elevator[k] > elevator[k - 1])
result += 6 * (elevator[k] - elevator[k - 1]);
else
result += 4 * (elevator[k-1] - elevator[k]);
k++;
}
cout << result << endl;
return 0;
}