| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
那位大哥哥,帮帮忙.(程序含有大量注释) 我也是硬搞的.不过WA.#include<stdio.h>
#include<string.h>
char str[73]; //存储输入字符串
char temp[73];
char rlt[10000][73];//存储字符串变形后的各种结果
int k; //存储结果
int len; //存储输入字符串的长度.
//反转字符串函数
void rev(char s[],int size)
{
int i;
char ch;
for(i = 0;i<size/2;i++)
{
ch = s[i];
s[i] = s[size - i - 1];
s[size - i - 1] = ch;
}
}
//处理len - 1情况和len-1 : 1的情况
void dowithFL()
{
/*----------------------------1:len - 1情况-------------------------------*/
//不作处理
strcpy(rlt[k++],str);
//两部分对换
strncpy(rlt[k],&str[1],len - 1);
rlt[k++][len - 1] = str[0];
//puts(rlt[k-1]);
//反转第二部分
rev(&temp[1],len - 1);
strcpy(rlt[k++],temp);
//puts(rlt[k-1]);
//反转第二部分并对换
strcpy(rlt[k],&temp[1]);
rlt[k++][len -1] = temp[0];
// puts(rlt[k-1]);
/*--------------------------len-1 : 1-----------------------------------*/
strcpy(temp,str);
//两部分对换
strncpy(&rlt[k][1],str,len - 1);
rlt[k++][0] = str[len - 1];
//puts(rlt[k-1]);
//反转第一部分
rev(temp,len - 1);
strcpy(rlt[k++],temp);
//puts(rlt[k-1]);
//反转第一部分并对换
strncpy(&rlt[k][1],temp,len - 1);
rlt[k++][0] = temp[len - 1];
//puts(rlt[k-1]);
/*for(i = 0;i<7;i++)
{
puts(rlt[i]);
}
*/
}
//处理2--len - 1的各种变形情况
void proce()
{
int i;
for(i = 2;i<len - 1;i++)
{
//两部分对换
strcpy(temp,str);
strncpy(rlt[k],&temp[i],len - i);
strncpy(&rlt[k++][len - i],&temp[0],i);
//puts(rlt[k-1]);
//反转第一部分
strcpy(temp,str);
rev(temp,i);
strcpy(rlt[k++],temp);
//puts(rlt[k-1]);
//反转第一部分并对换
strcpy(rlt[k],&temp[len - i]);
strncpy(&rlt[k++][i],&temp[0],len - i);
//puts(rlt[k-1]);
//反转第二部分
strcpy(temp,str);
rev(&temp[i],len - i);
strcpy(rlt[k++],temp);
//puts(rlt[k-1]);
//反转第二部分并对换
strcpy(rlt[k],&temp[i]);
strncpy(&rlt[k++][len - i],&temp[0],i);
//puts(rlt[k-1]);
//两部分都反转
strcpy(temp,str);
rev(temp,i);
//puts(temp);
rev(&temp[i],len - i);
//puts(temp);
strcpy(rlt[k++],temp);
//两部分反转并对换
strncpy(rlt[k],&temp[i],len - i);
strncpy(&rlt[k++][len - i],&temp[0],i);
//puts(rlt[k-1]);
}
}
void Print()
{
int i,j;
//查找表中相同的字符串.
for(i = 0;rlt[i][0] != 0;i++)
{
if(rlt[i][0] == -1)
continue;
for(j = i+1;rlt[j][0] != 0;j++)
{
if(rlt[j][0] == -1)
continue;
if((strcmp(rlt[i],rlt[j]) == 0)&&(rlt[j][0] != -1))
{
k--;
rlt[j][0] = -1;
}
}
}
printf("%d\n",k);//打印结果
}
int main()
{
int i = 1;
int m = 0;
long n;
scanf("%ld",&n);
getchar();
while(n--)
{
k = 0;
memset(rlt,0,sizeof(rlt));
memset(temp,0,sizeof(temp));
gets(str);
len = strlen(str);
strcpy(temp,str);
//单独处理只有两个字符的情况
if(len == 2)
{
if(str[0] == str[1])
{
printf("1\n");
continue;
}
else
{
printf("2\n");
continue;
}
}
//处理len - 1情况和len-1 : 1的情况
dowithFL();
//处理2--len - 1的各种变形情况
proce();
Print();
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator