实验一1.1 Vedic Square and Vedic Star 1.2 电梯

学习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;
}

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值