HDU 1468(Instant Complexity)

模拟题,注意输出格式,详细见注释。

#include <iostream>
#include <cstring>
#include <string>
#include <stack>
#include <cctype>
using namespace std;
const int MAXN = 15;

int num[MAXN]; //各次幂的系数

int main()
{
	int k;
	cin >> k;
	for (int Case = 1; Case <= k; Case++)
	{
		memset(num, 0, sizeof(num));
		stack<int> p; //循环层对应的LOOP后是数字还是'n'
		stack<int> q; //循环层的系数
		int nowCycle = 0; //当前循环层数
		int nowN = 0; //n的幂
		int nowNum = 1; //当前系数
		int opNum; //OP后的数字
		char c;
		string s;
		while (cin >> s)
		{
			if (s == "BEGIN")
			{
				++nowCycle;
				continue;
			}
			else if (s == "LOOP")
			{
				++nowCycle;
				while (!isdigit(cin.peek()) && cin.peek() != 'n')
					getchar();
				if (isdigit(cin.peek())) //LOOP后是数字
				{
					p.push(0);
					cin >> nowNum;
					if (!q.empty())
						nowNum *= q.top();
					q.push(nowNum);
				}	
				else //LOOP后是'n'
				{
					++nowN;
					p.push(1);
					q.push(nowNum);
					cin >> c;
				}
			}
			else if (s == "OP")
			{
				cin >> opNum;
				if (!q.empty())
					num[nowN] += opNum * q.top();
				else
					num[nowN] += opNum;
			}
			else if (s == "END")
			{
				--nowCycle;
				if (!p.empty() && p.top() == 1)
					--nowN;
				if (!p.empty())
					p.pop();
				if (!q.empty())
					q.pop();
				if (q.empty())
					nowNum = 1;
			}

			if (nowCycle == 0)
				break;
		}

		//输出
		cout << "Program #" << Case << endl;
		cout << "Runtime = ";
		bool flag = false; //运行时间是否不为0
		int i;
		for (i = 10; i >= 0; i--) //输出最高次幂部分
		{
			if (num[i] == 0)
				continue;
			else if (num[i] == 1)
			{
				flag = true;
				if (i == 0)
					cout << num[i];
				else if (i == 1)
					cout << "n";
				else
					cout << "n^" << i;
				break;
			}
			else
			{
				flag = true;
				if (i == 0)
					cout << num[i];
				else if (i == 1)
					cout << num[i] << "*n";
				else
					cout << num[i] << "*n^" << i;
				break;
			}
		}
		for (i -= 1; i >= 0; i--) //输出剩余部分
		{
			if (num[i] == 0)
				continue;
			else if (num[i] == 1)
			{
				flag = true;
				cout << "+";
				if (i == 0)
					cout << num[i];
				else if (i == 1)
					cout << "n";
				else
					cout << "n^" << i;
			}
			else
			{
				flag = true;
				cout << "+";
				if (i == 0)
					cout << num[i];
				else if (i == 1)
					cout << num[i] << "*n";
				else
					cout << num[i] << "*n^" << i;
			}
		}
		if (flag == false) //运行时间为0
			cout << 0;
		cout << endl << endl;
	}
	return 0;
}

继续加油。

发布了325 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Intelligence1028/article/details/105471111