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<