poj1107

 

解题心得:

1.看清题意是关键;

2.题目中有很多细节需要注意包括num[i]是否为0,以及转换的长度是否超出三个区间所含字符本身的长度等;

3.Transfer函数的书写时关键,注意体会。

 

  1 1 #include<stdio.h>  
  2 
  3 2 #include<string.h>  
  4 
  5 3 char s[85],r[85];  
  6 
  7 4 int f[85],a[3],num[3],len;  
  8 
  9 5 int transfer(int c,int k)  
 10 
 11 6 {  
 12 
 13 7     int i,t=0;  
 14 
 15 8     i=c;  
 16 
 17 9     while(t!=k)  
 18 
 19 10     {  
 20 
 21 11         i++;  
 22 
 23 12         if(i>len-1)  
 24 
 25 13         i=0;  
 26 
 27 14         if(f[i]==f[c])  
 28 
 29 15         t++;  
 30 
 31 16     }  
 32 
 33 17     r[i]=s[c];  
 34 
 35 18     return 0;  
 36 
 37 19 }  
 38 
 39 20 //转换字符采用的方式是把所有需要转换的数据按规定右移固定单位,如果所需要右移的单位超出本身的长度则重新从头开始查找,直到可以完成转换。
 40 
 41 21 int main()  
 42 
 43 22 {  
 44 
 45 23     while(scanf("%d%d%d",&a[0],&a[1],&a[2])==3)  
 46 
 47 24     {  
 48 
 49 25         if(a[0]==0&&a[1]==0&&a[2]==0)  
 50 
 51 26         break;  
 52 
 53 27         getchar();  
 54 
 55 28         memset(f,0,sizeof(f));  
 56 
 57 29         gets(s);  
 58 
 59 30         int i;  
 60 
 61 31         len=strlen(s);  
 62 
 63 32         num[0]=num[1]=num[2]=0;  
 64 
 65 33         for(i=0;i<len;i++)  
 66 
 67 34         {  
 68 
 69 35             if(s[i]>='a'&&s[i]<='i')  
 70 
 71 36             {  
 72 
 73 37                 f[i]=1;  
 74 
 75 38                 num[0]++;  
 76 
 77 39             }  
 78 
 79 40             else if(s[i]>='j'&&s[i]<='r')  
 80 
 81 41             {  
 82 
 83 42                 f[i]=2;  
 84 
 85 43                 num[1]++;  
 86 
 87 44             }  
 88 
 89 45             else  
 90 
 91 46             {  
 92 
 93 47                 f[i]=3;  
 94 
 95 48                 num[2]++;  
 96 
 97 49             }  
 98 
 99 50         }  
100 
101 51         ///注意num[i]为0的情况   
102 
103 52         for(i=0;i<len;i++)  
104 
105 53         {  
106 
107 54             if(f[i]==1)  
108 
109 55             {  
110 
111 56                 if(num[0])  
112 
113 57                 transfer(i,a[0]%num[0]);  
114 
115 58             }  
116 
117 59             else if(f[i]==2)  
118 
119 60             {  
120 
121 61                 if(num[1])  
122 
123 62                 transfer(i,a[1]%num[1]);  
124 
125 63             }  
126 
127 64               
128 
129 65             else  
130 
131 66             {  
132 
133 67                 if(num[2])  
134 
135 68                 transfer(i,a[2]%num[2]);  
136 
137 69             }  
138 
139 70         }  
140 
141 71         r[len]='/0';  
142 
143 72         puts(r);  
144 
145 73     }  
146 
147 74 }  

 

 

原文地址:https://www.cnblogs.com/khbcsu/p/3852715.html