<数据结构学习与实验指导>3-1一元多项式求导/3-2汉诺塔的非递归实现

3-1一元多项式求导

题目链接:点击打开链接

设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)

输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。

输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
我的C++代码:

#include<iostream>
using namespace std;
int main()
{
	int a, b;//a系数,b指数
	int flag = 0;//计算输入的ab对数
	do
	{
		cin >> a >> b;
		flag++;
		if (b != 0)
		{
			if (flag == 1)
				printf("%d %d", a*b, b - 1);//输出第一对系数指数,后面没空格
			else
				printf(" %d %d", a*b, b - 1);//后面的系数指数
		}
		if (b == 0&&flag==1)//常数项多项式,b=0且只输入了一对系数指数
		{
			cout << "0 0";
		}
	} while (getchar() != '\n');//当没有回车,继续输入
	//system("pause");
	return 0;
}

=================分割线==============


3-2汉诺塔的非递归实现


我的c++程序:

// 3-2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include <stack>
using namespace std;
struct tower 
{
	tower();
	tower(int n, char a, char b, char c) : _n(n), _x(a), _y(b), _z(c) {}
	int _n; 		// 起始柱上盘子数量
	char _x, _y, _z; 	// 保存柱子名称
}; //塔的数据类型
void hanoi(int n, char x, char y, char z)
{
	std::stack<tower> sta;//栈
	sta.push(tower(n, x, y, z));
	while (!sta.empty())
	{
		tower q = sta.top();
		sta.pop();
		n = q._n;
		x = q._x;
		y = q._y;
		z = q._z;
		if (n == 1)
		{
			cout << q._x<< "->" << q._z << "\n";
		}
		else
		{
			sta.push(tower(n - 1, y, x, z));//压入顺序
			sta.push(tower(1, x, y, z));
			sta.push(tower(n - 1, x, z, y));
		}
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	int n;//n起始柱上的盘数
	cin >> n;
	hanoi(n, 'a', 'b', 'c');//a起始柱,b借助柱,c目标柱
	//system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值