HJ98 自动售货系统
题目:https://www.nowcoder.com/practice/cd82dc8a4727404ca5d32fcb487c50bf?tpId=37&tqId=21321&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
题意就是编写一个自动售货机的系统,能够完成一些基本的操作。难点主要在于处理读入和码量。
不是,哥们,好大一坨模拟啊= =
我足足写了267行= =
不过倒是很好调。。虽然难度标着“困难”,感觉也就只有码量是“困难”的,别的都挺好处理的。
1 #include<bits/stdc++.h> 2 using namespace std; 3 char c,cML; 4 int SPshu[7],zhangshu[5],Toubi,sum=0; 5 int SPjia[7],Tuibi[5],Q,mz[5],f; 6 struct SP{ 7 int shu,id; 8 }sp[7]; 9 bool cmp(const SP&a,const SP&b){ 10 if(a.shu>b.shu)return 1; 11 if(a.shu<b.shu)return 0; 12 return a.id<b.id; 13 } 14 void InputR(){ 15 c=getchar(); 16 c=getchar(); 17 int cnt=0; 18 while(1){ 19 int x=0; 20 while(c!='-'&&c!=' '){ 21 x=x*10+c-'0'; 22 c=getchar(); 23 } 24 SPshu[++cnt]=x; 25 if(c!=' ') c=getchar(); 26 else break; 27 } 28 c=getchar(); 29 cnt=0; 30 while(1){ 31 int x=0; 32 while(c!='-'&&c!=';'){ 33 x=x*10+c-'0'; 34 c=getchar(); 35 } 36 zhangshu[++cnt]=x; 37 if(c!=';') c=getchar(); 38 else break; 39 } 40 return; 41 } 42 void OutputR(){ 43 puts("S001:Initialization is successful"); 44 return; 45 } 46 void InputP(){ 47 c=getchar(); 48 c=getchar(); 49 int x=0; 50 while(c!=';'){ 51 x=x*10+c-'0'; 52 c=getchar(); 53 } 54 Toubi=x; 55 return; 56 } 57 void OutputP(int x){ 58 if(x==2){ 59 puts("E002:Denomination error"); 60 return; 61 } 62 if(x==3){ 63 puts("E003:Change is not enough, pay fail"); 64 return; 65 } 66 if(x==5){ 67 puts("E005:All the goods sold out"); 68 return; 69 } 70 if(x==6){ 71 printf("S002:Pay success,balance=%d\n",sum); 72 return; 73 } 74 return; 75 } 76 void WorkP(){ 77 if(Toubi!=1&&Toubi!=2 78 &&Toubi!=5&&Toubi!=10){ 79 OutputP(2); 80 return; 81 } 82 if(Toubi==5||Toubi==10){ 83 if(zhangshu[1]+2*zhangshu[2]<Toubi){ 84 OutputP(3); 85 return; 86 } 87 } 88 bool f=0; 89 for(int i=1;i<=6;i++) 90 if(SPshu[i]>0) f=1; 91 if(f==0){ 92 OutputP(5); 93 return; 94 } 95 sum+=Toubi; 96 if(Toubi==1||Toubi==2) zhangshu[Toubi]++; 97 if(Toubi==5) zhangshu[3]++; 98 if(Toubi==10) zhangshu[4]++; 99 OutputP(6); 100 return; 101 } 102 void OutputB(int x){ 103 if(x==6){ 104 puts("E006:Goods does not exist"); 105 return; 106 } 107 if(x==7){ 108 puts("E007:The goods sold out"); 109 return; 110 } 111 if(x==8){ 112 puts("E008:Lack of balance"); 113 return; 114 } 115 if(x==3){ 116 printf("S003:Buy success,balance=%d\n",sum); 117 return; 118 } 119 return; 120 } 121 void WorkB(int x){ 122 if(x<1||x>6){ 123 OutputB(6); 124 return; 125 } 126 if(SPshu[x]==0){ 127 OutputB(7); 128 return; 129 } 130 if(sum<SPjia[x]){ 131 OutputB(8); 132 return; 133 } 134 sum-=SPjia[x]; 135 OutputB(3); 136 return; 137 } 138 void InputB(){ 139 c=getchar(); 140 c=getchar(); 141 c=getchar(); 142 int x=c-'0'; 143 WorkB(x); 144 c=getchar(); 145 return; 146 } 147 void OutputC(int x){ 148 if(x==9){ 149 puts("E009:Work failure"); 150 return; 151 } 152 if(x==1){ 153 for(int i=1;i<=4;i++){ 154 printf("%d yuan coin number=%d\n",mz[i],Tuibi[i]); 155 } 156 } 157 return; 158 } 159 void WorkTuibi(int x){ 160 if(sum>=zhangshu[x]*mz[x]){ 161 sum-=zhangshu[x]*mz[x]; 162 Tuibi[x]=zhangshu[x]; 163 zhangshu[x]=0; 164 } 165 else { 166 Tuibi[x]=sum/mz[x]; 167 zhangshu[x]-=Tuibi[x]; 168 sum-=Tuibi[x]*mz[x]; 169 } 170 return; 171 } 172 void WorkC(){ 173 if(sum==0) { 174 OutputC(9); 175 return; 176 } 177 for(int i=4;i>=1;i--) 178 WorkTuibi(i); 179 OutputC(1); 180 return; 181 } 182 void InputQ(){ 183 c=getchar(); 184 c=getchar(); 185 // while(c<'0'||c>'9')c=getchar(); 186 int x=0; 187 f=0; 188 while(c>='0'&&c<='9'){ 189 f=1; 190 x=x*10+c-'0'; 191 c=getchar(); 192 } 193 Q=x; 194 return; 195 } 196 void OutputQ(int x){ 197 if(x==10){ 198 puts("E010:Parameter error"); 199 return; 200 } 201 if(x==0){ 202 for(int i=1;i<=6;i++){ 203 printf("A%d %d %d\n",sp[i].id,SPjia[sp[i].id],sp[i].shu); 204 } 205 return; 206 } 207 if(x==1){ 208 for(int i=1;i<=4;i++){ 209 printf("%d yuan coin number=%d\n",mz[i],zhangshu[i]); 210 } 211 return; 212 } 213 return; 214 } 215 void WorkQ(){ 216 if((Q!=0&&Q!=1)||(!f)){ 217 OutputQ(10); 218 return; 219 } 220 if(Q==0){ 221 for(int i=1;i<=6;i++){ 222 sp[i].id=i; 223 sp[i].shu=SPshu[i]; 224 } 225 sort(sp+1,sp+6+1,cmp); 226 OutputQ(0); 227 return; 228 } 229 else{ 230 OutputQ(1); 231 return; 232 } 233 return; 234 } 235 void init(){ 236 mz[1]=1; mz[2]=2; mz[3]=5; mz[4]=10; 237 SPjia[1]=2;SPjia[2]=3;SPjia[3]=4; 238 SPjia[4]=5;SPjia[5]=8;SPjia[6]=6; 239 cML=getchar(); 240 while(cML!=EOF){ 241 if(cML=='r'){ 242 InputR(); 243 OutputR(); 244 } 245 if(cML=='p'){ 246 InputP(); 247 WorkP(); 248 } 249 if(cML=='b'){ 250 InputB(); 251 } 252 if(cML=='c'){ 253 c=getchar(); 254 WorkC(); 255 } 256 if(cML=='q'){ 257 InputQ(); 258 WorkQ(); 259 } 260 cML=getchar(); 261 } 262 return; 263 } 264 int main(){ 265 init(); 266 return 0; 267 }
到此为止华为机试题库里的“较难”和“困难”题都被我写完了。接下来挑一些中等题写写,如果实在太容易我就去写leetcode hot100,据说挺常考的。