[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 1# codegay
ord就是快
该题的单词文件为
  1. #ProjectEuler 42:Coded triangle numbers
  2. #2016/10/15 by HAPPY
  3. i=0
  4. for Line in open('p042_words.txt','r'):
  5. Line=Line.strip("\"").split("\",\"")
  6. for W in Line:
  7. S=0
  8. for Char in W:
  9. S+=ord(Char)-64
  10. if( (8*S+1)**0.5==int((8*S+1)**0.5) and int((8*S+1)**0.5)&1==1 ):
  11. i+=1
  12. print(i)
复制代码

TOP

回复 3# codegay
那应该如何写,就是要取整,怎么写最好。

TOP

回复 5# 523066680
哦,我把C的写法带到python里了。
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i=0,sum,fsize;
  5. char* Line;
  6. FILE* fp=fopen("p042_words.txt", "rb");
  7. if(fp==NULL){return 1;}
  8. fseek(fp, 0, SEEK_END);
  9. fsize=ftell(fp)+1;
  10. Line=(char *)calloc(fsize, sizeof(char));
  11. fseek(fp, 0, SEEK_SET);
  12. fgets(Line, fsize, fp);
  13. fclose(fp);
  14. for(; *Line!='\0'; Line++){
  15. if( 'A'<= *Line && *Line <='Z' ){
  16. sum+=*Line-'A'+1;
  17. }else{
  18. if((int)sqrt(2*sum)*(int)(sqrt(2*sum)+1)-2*sum==0 && sum!=0){i++;}
  19. sum=0;
  20. }
  21. }
  22. printf("%d\n",i);
  23. return 0;
  24. }
复制代码

TOP

批处理版
  1. @echo off&setlocal enabledelayedexpansion
  2. (
  3. for /l %%j in (1,1,16) do (
  4. set/p str[%%j]=
  5. set "str[%%j]=!str[%%j]:"=0!"
  6. set "str[%%j]=!str[%%j]:,=0!"
  7. )
  8. )<p042_words.txt
  9. for %%N in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (set/a "i+=1,#%%N=i")
  10. for /l %%j in (1,1,16) do (
  11. set/a "p=%%j*100/16"&echo 正在计算...!p!%%
  12. for /l %%i in (0,1,1080) do (
  13. set "Char=!str[%%j]:~%%i,1!"
  14. if not "!Char!"=="0" (
  15. set/a "sum+=#!Char!"
  16. ) else (
  17. for /l %%k in (1,1,20) do (
  18. set/a "k=%%k*(%%k+1)/2"
  19. if !k! equ !sum! (set/a "n+=1")
  20. )
  21. set/a "sum=0"
  22. )
  23. )
  24. )
  25. set/p=共有!n!个三角数单词
复制代码
1

评分人数

TOP

返回列表