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