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 |
Re:那位大哥哥,帮帮忙.reverse()多好用,要学会投机取巧In Reply To:那位大哥哥,帮帮忙.(程序含有大量注释) 我也是硬搞的.不过WA. Posted by:Morpheus at 2006-10-09 10:45:04 > #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