HDU2171_输入处理_点名字

题目大意: 给你一组人名,然后指定从哪个人名开始计数,注意人名是围城一个圈的。然后要求打印出点到名字的人的名字。 解题思路: 用map存放人名,(用两个map逆着存,这样方便取,方便转换)。之后靠模数的方式来取数。模的时候处理了半个小时。困了,脑筋转不动了。 代码:
#include
#include
#include
using namespace std;
const int MAX = 1005;
int main(void)
{
	int cas;
	scanf("%d", &cas);
	while(cas--)
	{
		getchar();
		char str[MAX];
		gets(str);

		int len = strlen(str);
		string nameStr = "";
		int nameNum = 0;
		map name1;
		map nameF;

		for(int i = 0; i <= len; i++)
		{
			if(str[i] != ' ' && str[i] != '\0')
				nameStr += str[i];
			else
			{
				name1[nameStr] = ++nameNum;
				nameF[nameNum] = nameStr;
				nameStr = "";
			}
		}

		gets(str);
		int n;
		scanf("%d", &n);
		int temp = n % nameNum;
		int ans;
		for(int i = 1; i < nameNum; i++)
		{
			nameF[i+nameNum] = nameF[i];
		}
		if(temp == 0)
		{
			if(name1[str] == 1)
				ans = nameNum;
			else
				ans = name1[str] - 1;
		}
		else
		{
			ans = name1[str] + temp - 1;
		}
		cout<
原文地址:https://www.cnblogs.com/cchun/p/2520213.html