-1

对不起,长度。用更少的代码做到这一点并不容易。问题描述如下:

如果数字 1 到 5 用单词写出:一、二、三、四、五,那么总共使用了 3 + 3 + 5 + 4 + 4 = 19 个字母。 如果用文字写出从 1 到 1000(一千)的所有数字,将使用多少个字母? 注意:不要计算空格或连字符。例如,342(三百四十二)包含 23 个字母,而 115(一百一十五)包含 20 个字母。在写出数字时使用“and”符合英国的用法。

def buildRef():
    wordRef = {0: 0}
    twentyRefList = [0, 3, 3, 5, 4, 4, 3, 5, 5, 4, 3, 6, 6, 8, 8, 7, 7, 9, 8, 8, 6]
    tensRefList = [6, 5, 5, 5, 7, 6, 6]
    for i in range(1, 21):
        wordRef[i] = twentyRefList[i]
    for i in range(3, 10):
        wordRef[i*10] = tensRefList[i - 3]
    for i in range(1, 10):
        wordRef[i * 100] = twentyRefList[i] + 7
    wordRef[1000] = 11
    return wordRef

def wordSum(num):
    wordSum = 0
    wordRef = buildRef()
    tens, hundreds, tempSum = 0, 0, 0
    for i in range(1, num + 1):
        if i in wordRef:
            tempSum = wordRef[i]
            wordSum += wordRef[i]
        elif i < 100:
            tempSum = wordRef[int(i / 10) * 10] + wordRef[i % 10]
            wordSum += wordRef[int(i / 10) * 10] + wordRef[i % 10]
        else:
            tempSum = wordRef[int(i / 100) * 100] + wordRef[int((i % 100) / 10) * 10] + wordRef[i % 10] + 3
            wordSum += tempSum
        print(i, tempSum, wordSum)
    return wordSum

print(wordSum(1000))

测试输出:第一列是当前数字,第二列是该数字中的字母数。第三是总字母数。

1 3 3
2 3 6
3 5 11
4 4 15
5 4 19
6 3 22
7 5 27
8 5 32
9 4 36
10 3 39
11 6 45
12 6 51
13 8 59
14 8 67
15 7 74
16 7 81
17 9 90
18 8 98
19 8 106
20 6 112
21 9 121
22 9 130
23 11 141
24 10 151
25 10 161
26 9 170
27 11 181
28 11 192
29 10 202
30 6 208
31 9 217
32 9 226
33 11 237
34 10 247
35 10 257
36 9 266
37 11 277
38 11 288
39 10 298
40 5 303
41 8 311
42 8 319
43 10 329
44 9 338
45 9 347
46 8 355
47 10 365
48 10 375
49 9 384
50 5 389
51 8 397
52 8 405
53 10 415
54 9 424
55 9 433
56 8 441
57 10 451
58 10 461
59 9 470
60 5 475
61 8 483
62 8 491
63 10 501
64 9 510
65 9 519
66 8 527
67 10 537
68 10 547
69 9 556
70 7 563
71 10 573
72 10 583
73 12 595
74 11 606
75 11 617
76 10 627
77 12 639
78 12 651
79 11 662
80 6 668
81 9 677
82 9 686
83 11 697
84 10 707
85 10 717
86 9 726
87 11 737
88 11 748
89 10 758
90 6 764
91 9 773
92 9 782
93 11 793
94 10 803
95 10 813
96 9 822
97 11 833
98 11 844
99 10 854
100 10 864
101 16 880
102 16 896
103 18 914
104 17 931
105 17 948
106 16 964
107 18 982
108 18 1000
109 17 1017
110 16 1033
111 19 1052
112 19 1071
113 21 1092
114 20 1112
115 20 1132
116 19 1151
117 21 1172
118 21 1193
119 20 1213
120 19 1232
121 22 1254
122 22 1276
123 24 1300
124 23 1323
125 23 1346
126 22 1368
127 24 1392
128 24 1416
129 23 1439
130 19 1458
131 22 1480
132 22 1502
133 24 1526
134 23 1549
135 23 1572
136 22 1594
137 24 1618
138 24 1642
139 23 1665
140 18 1683
141 21 1704
142 21 1725
143 23 1748
144 22 1770
145 22 1792
146 21 1813
147 23 1836
148 23 1859
149 22 1881
150 18 1899
151 21 1920
152 21 1941
153 23 1964
154 22 1986
155 22 2008
156 21 2029
157 23 2052
158 23 2075
159 22 2097
160 18 2115
161 21 2136
162 21 2157
163 23 2180
164 22 2202
165 22 2224
166 21 2245
167 23 2268
168 23 2291
169 22 2313
170 20 2333
171 23 2356
172 23 2379
173 25 2404
174 24 2428
175 24 2452
176 23 2475
177 25 2500
178 25 2525
179 24 2549
180 19 2568
181 22 2590
182 22 2612
183 24 2636
184 23 2659
185 23 2682
186 22 2704
187 24 2728
188 24 2752
189 23 2775
190 19 2794
191 22 2816
192 22 2838
193 24 2862
194 23 2885
195 23 2908
196 22 2930
197 24 2954
198 24 2978
199 23 3001
200 10 3011
201 16 3027
202 16 3043
203 18 3061
204 17 3078
205 17 3095
206 16 3111
207 18 3129
208 18 3147
209 17 3164
210 16 3180
211 19 3199
212 19 3218
213 21 3239
214 20 3259
215 20 3279
216 19 3298
217 21 3319
218 21 3340
219 20 3360
220 19 3379
221 22 3401
222 22 3423
223 24 3447
224 23 3470
225 23 3493
226 22 3515
227 24 3539
228 24 3563
229 23 3586
230 19 3605
231 22 3627
232 22 3649
233 24 3673
234 23 3696
235 23 3719
236 22 3741
237 24 3765
238 24 3789
239 23 3812
240 18 3830
241 21 3851
242 21 3872
243 23 3895
244 22 3917
245 22 3939
246 21 3960
247 23 3983
248 23 4006
249 22 4028
250 18 4046
251 21 4067
252 21 4088
253 23 4111
254 22 4133
255 22 4155
256 21 4176
257 23 4199
258 23 4222
259 22 4244
260 18 4262
261 21 4283
262 21 4304
263 23 4327
264 22 4349
265 22 4371
266 21 4392
267 23 4415
268 23 4438
269 22 4460
270 20 4480
271 23 4503
272 23 4526
273 25 4551
274 24 4575
275 24 4599
276 23 4622
277 25 4647
278 25 4672
279 24 4696
280 19 4715
281 22 4737
282 22 4759
283 24 4783
284 23 4806
285 23 4829
286 22 4851
287 24 4875
288 24 4899
289 23 4922
290 19 4941
291 22 4963
292 22 4985
293 24 5009
294 23 5032
295 23 5055
296 22 5077
297 24 5101
298 24 5125
299 23 5148
300 12 5160
301 18 5178
302 18 5196
303 20 5216
304 19 5235
305 19 5254
306 18 5272
307 20 5292
308 20 5312
309 19 5331
310 18 5349
311 21 5370
312 21 5391
313 23 5414
314 22 5436
315 22 5458
316 21 5479
317 23 5502
318 23 5525
319 22 5547
320 21 5568
321 24 5592
322 24 5616
323 26 5642
324 25 5667
325 25 5692
326 24 5716
327 26 5742
328 26 5768
329 25 5793
330 21 5814
331 24 5838
332 24 5862
333 26 5888
334 25 5913
335 25 5938
336 24 5962
337 26 5988
338 26 6014
339 25 6039
340 20 6059
341 23 6082
342 23 6105
343 25 6130
344 24 6154
345 24 6178
346 23 6201
347 25 6226
348 25 6251
349 24 6275
350 20 6295
351 23 6318
352 23 6341
353 25 6366
354 24 6390
355 24 6414
356 23 6437
357 25 6462
358 25 6487
359 24 6511
360 20 6531
361 23 6554
362 23 6577
363 25 6602
364 24 6626
365 24 6650
366 23 6673
367 25 6698
368 25 6723
369 24 6747
370 22 6769
371 25 6794
372 25 6819
373 27 6846
374 26 6872
375 26 6898
376 25 6923
377 27 6950
378 27 6977
379 26 7003
380 21 7024
381 24 7048
382 24 7072
383 26 7098
384 25 7123
385 25 7148
386 24 7172
387 26 7198
388 26 7224
389 25 7249
390 21 7270
391 24 7294
392 24 7318
393 26 7344
394 25 7369
395 25 7394
396 24 7418
397 26 7444
398 26 7470
399 25 7495
400 11 7506
401 17 7523
402 17 7540
403 19 7559
404 18 7577
405 18 7595
406 17 7612
407 19 7631
408 19 7650
409 18 7668
410 17 7685
411 20 7705
412 20 7725
413 22 7747
414 21 7768
415 21 7789
416 20 7809
417 22 7831
418 22 7853
419 21 7874
420 20 7894
421 23 7917
422 23 7940
423 25 7965
424 24 7989
425 24 8013
426 23 8036
427 25 8061
428 25 8086
429 24 8110
430 20 8130
431 23 8153
432 23 8176
433 25 8201
434 24 8225
435 24 8249
436 23 8272
437 25 8297
438 25 8322
439 24 8346
440 19 8365
441 22 8387
442 22 8409
443 24 8433
444 23 8456
445 23 8479
446 22 8501
447 24 8525
448 24 8549
449 23 8572
450 19 8591
451 22 8613
452 22 8635
453 24 8659
454 23 8682
455 23 8705
456 22 8727
457 24 8751
458 24 8775
459 23 8798
460 19 8817
461 22 8839
462 22 8861
463 24 8885
464 23 8908
465 23 8931
466 22 8953
467 24 8977
468 24 9001
469 23 9024
470 21 9045
471 24 9069
472 24 9093
473 26 9119
474 25 9144
475 25 9169
476 24 9193
477 26 9219
478 26 9245
479 25 9270
480 20 9290
481 23 9313
482 23 9336
483 25 9361
484 24 9385
485 24 9409
486 23 9432
487 25 9457
488 25 9482
489 24 9506
490 20 9526
491 23 9549
492 23 9572
493 25 9597
494 24 9621
495 24 9645
496 23 9668
497 25 9693
498 25 9718
499 24 9742
500 11 9753
501 17 9770
502 17 9787
503 19 9806
504 18 9824
505 18 9842
506 17 9859
507 19 9878
508 19 9897
509 18 9915
510 17 9932
511 20 9952
512 20 9972
513 22 9994
514 21 10015
515 21 10036
516 20 10056
517 22 10078
518 22 10100
519 21 10121
520 20 10141
521 23 10164
522 23 10187
523 25 10212
524 24 10236
525 24 10260
526 23 10283
527 25 10308
528 25 10333
529 24 10357
530 20 10377
531 23 10400
532 23 10423
533 25 10448
534 24 10472
535 24 10496
536 23 10519
537 25 10544
538 25 10569
539 24 10593
540 19 10612
541 22 10634
542 22 10656
543 24 10680
544 23 10703
545 23 10726
546 22 10748
547 24 10772
548 24 10796
549 23 10819
550 19 10838
551 22 10860
552 22 10882
553 24 10906
554 23 10929
555 23 10952
556 22 10974
557 24 10998
558 24 11022
559 23 11045
560 19 11064
561 22 11086
562 22 11108
563 24 11132
564 23 11155
565 23 11178
566 22 11200
567 24 11224
568 24 11248
569 23 11271
570 21 11292
571 24 11316
572 24 11340
573 26 11366
574 25 11391
575 25 11416
576 24 11440
577 26 11466
578 26 11492
579 25 11517
580 20 11537
581 23 11560
582 23 11583
583 25 11608
584 24 11632
585 24 11656
586 23 11679
587 25 11704
588 25 11729
589 24 11753
590 20 11773
591 23 11796
592 23 11819
593 25 11844
594 24 11868
595 24 11892
596 23 11915
597 25 11940
598 25 11965
599 24 11989
600 10 11999
601 16 12015
602 16 12031
603 18 12049
604 17 12066
605 17 12083
606 16 12099
607 18 12117
608 18 12135
609 17 12152
610 16 12168
611 19 12187
612 19 12206
613 21 12227
614 20 12247
615 20 12267
616 19 12286
617 21 12307
618 21 12328
619 20 12348
620 19 12367
621 22 12389
622 22 12411
623 24 12435
624 23 12458
625 23 12481
626 22 12503
627 24 12527
628 24 12551
629 23 12574
630 19 12593
631 22 12615
632 22 12637
633 24 12661
634 23 12684
635 23 12707
636 22 12729
637 24 12753
638 24 12777
639 23 12800
640 18 12818
641 21 12839
642 21 12860
643 23 12883
644 22 12905
645 22 12927
646 21 12948
647 23 12971
648 23 12994
649 22 13016
650 18 13034
651 21 13055
652 21 13076
653 23 13099
654 22 13121
655 22 13143
656 21 13164
657 23 13187
658 23 13210
659 22 13232
660 18 13250
661 21 13271
662 21 13292
663 23 13315
664 22 13337
665 22 13359
666 21 13380
667 23 13403
668 23 13426
669 22 13448
670 20 13468
671 23 13491
672 23 13514
673 25 13539
674 24 13563
675 24 13587
676 23 13610
677 25 13635
678 25 13660
679 24 13684
680 19 13703
681 22 13725
682 22 13747
683 24 13771
684 23 13794
685 23 13817
686 22 13839
687 24 13863
688 24 13887
689 23 13910
690 19 13929
691 22 13951
692 22 13973
693 24 13997
694 23 14020
695 23 14043
696 22 14065
697 24 14089
698 24 14113
699 23 14136
700 12 14148
701 18 14166
702 18 14184
703 20 14204
704 19 14223
705 19 14242
706 18 14260
707 20 14280
708 20 14300
709 19 14319
710 18 14337
711 21 14358
712 21 14379
713 23 14402
714 22 14424
715 22 14446
716 21 14467
717 23 14490
718 23 14513
719 22 14535
720 21 14556
721 24 14580
722 24 14604
723 26 14630
724 25 14655
725 25 14680
726 24 14704
727 26 14730
728 26 14756
729 25 14781
730 21 14802
731 24 14826
732 24 14850
733 26 14876
734 25 14901
735 25 14926
736 24 14950
737 26 14976
738 26 15002
739 25 15027
740 20 15047
741 23 15070
742 23 15093
743 25 15118
744 24 15142
745 24 15166
746 23 15189
747 25 15214
748 25 15239
749 24 15263
750 20 15283
751 23 15306
752 23 15329
753 25 15354
754 24 15378
755 24 15402
756 23 15425
757 25 15450
758 25 15475
759 24 15499
760 20 15519
761 23 15542
762 23 15565
763 25 15590
764 24 15614
765 24 15638
766 23 15661
767 25 15686
768 25 15711
769 24 15735
770 22 15757
771 25 15782
772 25 15807
773 27 15834
774 26 15860
775 26 15886
776 25 15911
777 27 15938
778 27 15965
779 26 15991
780 21 16012
781 24 16036
782 24 16060
783 26 16086
784 25 16111
785 25 16136
786 24 16160
787 26 16186
788 26 16212
789 25 16237
790 21 16258
791 24 16282
792 24 16306
793 26 16332
794 25 16357
795 25 16382
796 24 16406
797 26 16432
798 26 16458
799 25 16483
800 12 16495
801 18 16513
802 18 16531
803 20 16551
804 19 16570
805 19 16589
806 18 16607
807 20 16627
808 20 16647
809 19 16666
810 18 16684
811 21 16705
812 21 16726
813 23 16749
814 22 16771
815 22 16793
816 21 16814
817 23 16837
818 23 16860
819 22 16882
820 21 16903
821 24 16927
822 24 16951
823 26 16977
824 25 17002
825 25 17027
826 24 17051
827 26 17077
828 26 17103
829 25 17128
830 21 17149
831 24 17173
832 24 17197
833 26 17223
834 25 17248
835 25 17273
836 24 17297
837 26 17323
838 26 17349
839 25 17374
840 20 17394
841 23 17417
842 23 17440
843 25 17465
844 24 17489
845 24 17513
846 23 17536
847 25 17561
848 25 17586
849 24 17610
850 20 17630
851 23 17653
852 23 17676
853 25 17701
854 24 17725
855 24 17749
856 23 17772
857 25 17797
858 25 17822
859 24 17846
860 20 17866
861 23 17889
862 23 17912
863 25 17937
864 24 17961
865 24 17985
866 23 18008
867 25 18033
868 25 18058
869 24 18082
870 22 18104
871 25 18129
872 25 18154
873 27 18181
874 26 18207
875 26 18233
876 25 18258
877 27 18285
878 27 18312
879 26 18338
880 21 18359
881 24 18383
882 24 18407
883 26 18433
884 25 18458
885 25 18483
886 24 18507
887 26 18533
888 26 18559
889 25 18584
890 21 18605
891 24 18629
892 24 18653
893 26 18679
894 25 18704
895 25 18729
896 24 18753
897 26 18779
898 26 18805
899 25 18830
900 11 18841
901 17 18858
902 17 18875
903 19 18894
904 18 18912
905 18 18930
906 17 18947
907 19 18966
908 19 18985
909 18 19003
910 17 19020
911 20 19040
912 20 19060
913 22 19082
914 21 19103
915 21 19124
916 20 19144
917 22 19166
918 22 19188
919 21 19209
920 20 19229
921 23 19252
922 23 19275
923 25 19300
924 24 19324
925 24 19348
926 23 19371
927 25 19396
928 25 19421
929 24 19445
930 20 19465
931 23 19488
932 23 19511
933 25 19536
934 24 19560
935 24 19584
936 23 19607
937 25 19632
938 25 19657
939 24 19681
940 19 19700
941 22 19722
942 22 19744
943 24 19768
944 23 19791
945 23 19814
946 22 19836
947 24 19860
948 24 19884
949 23 19907
950 19 19926
951 22 19948
952 22 19970
953 24 19994
954 23 20017
955 23 20040
956 22 20062
957 24 20086
958 24 20110
959 23 20133
960 19 20152
961 22 20174
962 22 20196
963 24 20220
964 23 20243
965 23 20266
966 22 20288
967 24 20312
968 24 20336
969 23 20359
970 21 20380
971 24 20404
972 24 20428
973 26 20454
974 25 20479
975 25 20504
976 24 20528
977 26 20554
978 26 20580
979 25 20605
980 20 20625
981 23 20648
982 23 20671
983 25 20696
984 24 20720
985 24 20744
986 23 20767
987 25 20792
988 25 20817
989 24 20841
990 20 20861
991 23 20884
992 23 20907
993 25 20932
994 24 20956
995 24 20980
996 23 21003
997 25 21028
998 25 21053
999 24 21077
1000 11 21088

我看过的每个潜在问题编号都检查得很好。也许更有经验的眼睛可以发现我做错了什么。真正的解决方案是 21124,这意味着我在某个地方落后 36 点。

4

1 回答 1

0

忘记正确计算百位数,我只需要替换:

    else:
        tempSum = wordRef[int(i / 100) * 100] + wordRef[int((i % 100) / 10) * 10] + wordRef[i % 10] + 3
        wordSum += tempSum

和:

else:
    wordSum += wordRef[int(i / 100) * 100] + 3
    if i % 100 < 20:
        wordSum += wordRef[i % 100]
    else:
        wordSum += wordRef[int((i % 100) / 10) * 10] + wordRef[i % 10]

在替换代码时,我省略了测试,因为不再需要它。

于 2013-02-21T10:18:37.850 回答