OpenJudge2819

我用的方法比较水, 代码写得比较乱,

自己写了一小时才AC、, 悲剧啊。

然后就是, 没注意输入000时 要break from while

我想呢, 过了几个星期我自己也看不懂代码 。

上goole找了一下, 貌似没人贴代码(我自己找不到)。

 

下面我贴我的代码吧,

请大家批评, 也请大哥们写个比较 高效率的代码, 好让小的学学东西。

 

#include <iostream>
#include <fstream>
#include <cstring>
#include <string>

using namespace std; 

struct data
{
	int c[1000]; 
	int length;
}; 

data a[3];

char s[10000];
int stmp[10000];

void apart(string s) // 分三组  , 每组记录 元素在主数组中的下标位置。
{
	int i; 
	a[0].length = a[1].length = a[2].length = 0;
	for(i=0; i<s.size(); i++)
	{
		if('a'<=s.at(i) && s.at(i)<='i')
			a[0].c[a[0].length++] = i; 
		else if('j'<=s.at(i) && s.at(i)<='r')
			a[1].c[a[1].length++] = i; 
		else 
			a[2].c[a[2].length++] = i;
	}
}

void resolve(int way, int k)   //每组移动位置,将移动的数据保存在tmp[]中, 然后遍历tmp, 将下边写到对应位置。
{
	int pos, i, len;
	int tmp[1000];
	len = a[way].length;
	for(i=0; i<len; i++)
	{
		tmp[(i+k) % len] = a[way].c[i];
	}
	
	for(i=0; i<len; i++)  // 将下边写到对应位置。
		stmp[a[way].c[i]] = tmp[i];
}

int main()
{
	//ifstream in("OpenJudgeText.txt"); 

	int k[3], i, len; 

	while(cin>>k[0]>>k[1]>>k[2])
	{
		if(k[0]==0 && k[1]==0 && k[2]==0)
			break;
		cin>>s; 
		len = strlen(s);
		apart(s);

		for(i=0; i<3; i++)
			resolve(i,  k[i]);		

		for(i=0; i<len; i++)
			cout<<s[stmp[i]];
		cout<<endl;
	}
	return 0; 
}


 

 

你可能感兴趣的:(c,struct,String)