POJ3617 Best Cow Line

问题链接:POJ3617 Best Cow Line

问题简述:

输入一个正整数N,再输入N行,每行包含一个字母(‘A’-‘Z’),将这些字母按顺序构成一个字符串S。按照以下规则取字符,顺序构成一个新的字符串T,T是按照字典顺序最小的。

1.从S的头取一个字符并且删除该字符,连接到T中(开始时T为空串);

2.从S的尾取一个字符并且删除该字符,连接到T中。

问题分析:
这是一个用字符串构建另一个字符串的问题,可以先将输入的字符串倒置成为
另一个字符串,然后,通过比较两个字符串的首字符大小构建问题所需要的字
符串,当字符相同时,通过比较下一位字符串的大小来取值。
错点:
1.80换行通过设置某个参数计数,到达80换行即可,不需要另外的参数进行循环

2.当两个字符相等时是比较下一个字符的大小,然后进行输出的。该过程可以设置一个死循环来完成。

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
	int n;
	cin >> n;
	string a;
	string b;
	char s;
	for(int i=0;i<n;++i)
	{
		cin >> s;
		a = a + s;
	}
	for (int i = 0; i < n; ++i)
	{
		b+= a[n - i - 1];
	}
	string t;
	int i = 0, j = 0;
	int x = 0;
		for(int z=0;z<n;z++)
		{
			int l = 1;
			if (a[i] < b[j])
			{
				cout<< a[i];
				i++;
			}
			else if(a[i]>b[j])
			{
				cout<< b[j];
				j++;
			}
			else
			{
				while (1)
				{
					if (a[i + l] < b[j + l])
					{
						cout << a[i];
						i++;
						break;
					}
					else if (a[i + l] > b[j + l])
					{
						cout << b[j];
						j++;
						break;
					}
					else
					{
						++l;
					}
				}
			}
			if (++x == 80)
			{
				x = 0;
				cout << endl;
			}
		}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值