#工具:格式化隨機數據發生
阿新 • • 發佈:2018-09-02
time print define bits lock spa 換行符 rep fin
支持單區間隨機數輸出、同區間隨機數重復輸出、普通數據直接輸出、一組數據重復輸出、修改輸出文件、隨機字符串輸出
[a,b]
輸出區間[a,b]內的隨機數。[a,b]*n
輸出n個區間[a,b]內的隨機數。[a,b]*[na,nb]
輸出n個區間[a,b]內的隨機數。n是區間[na,nb]內的隨機數。<c1,c2>
輸出一個ASCII碼在字符c1和c2(包含c1和c2)的字符。<c1,c2>*n
輸出n個ASCII碼在字符c1和c2(包含c1和c2)的字符,即長為n的字符串。<c1,c2>*[na,nb]
輸出n個ASCII碼在字符c1和c2(包含c1和c2)的字符,即長為n的字符串。n是區間[na,nb]內的隨機數。{...}*n
將花括號內的命令重復執行n次。*n
可以省略,表示執行一次。{
和}*n
必須與其他命令用空白字符隔開。{...}*[na,nb]
將花括號內的命令重復執行n次。{
和}*[na,nb]
必須與其他命令用空白字符隔開。n是區間[na,nb]內的隨機數。xxx.txt
將輸出文件重定向為xxx.txt(默認輸出文件為".\Input.txt")。重定向為同一文件相當於把文件清空。EOF
表示命令的終止- 不符合以上格式的輸入被視作普通數據,不做處理直接輸出
- 以上命令都應兩兩用空白字符隔開
- 除同區間隨機數重復輸出會在一行內輸出數據外,其他操作的輸出都以換行符隔開
#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) #define ms(arr,a) memset(arr,a,sizeof arr) #define debug(x) cout<<"< "#x" = "<<x<<" >"<<endl const int maxn=1e2+5; char s[maxn][maxn]; int sum; void solve(int l,int r,int times) { while(times--) { for(int i=l;i<=r;i++) { if(strstr(s[i],".txt")){freopen(s[i],"w",stdout);continue;} if(s[i][0]==‘{‘) { int lft=i,cnt=1; while(cnt) { i++; if(s[i][0]==‘{‘)cnt++; else if(s[i][0]==‘}‘)cnt--; } int t=1; int nl,nr; if(strlen(s[i])>1) { if(s[i][2]==‘[‘) { sscanf(s[i],"}*[%d,%d]",&nl,&nr); t=rand()%(nr-nl+1)+nl; } else sscanf(s[i],"}*%d",&t); } solve(lft+1,i-1,t); continue; } if(s[i][0]==‘[‘) { int lft,rgt,t=1; char *pos; int nl,nr; if(pos=strstr(s[i],"*")) { if(*(pos+1)==‘[‘) { sscanf(s[i],"[%d,%d]*[%d,%d]",&lft,&rgt,&nl,&nr); t=rand()%(nr-nl+1)+nl; } else sscanf(s[i],"[%d,%d]*%d",&lft,&rgt,&t); } else sscanf(s[i],"[%d,%d]",&lft,&rgt); while(t--)printf("%d ",rand()%(rgt-lft+1)+lft); printf("\n"); } if(s[i][0]==‘<‘) { char lft,rgt;int t=1; char *pos; int nl,nr; if(pos=strstr(s[i],"*")) { if(*(pos+1)==‘[‘) { sscanf(s[i],"<%c,%c>*[%d,%d]",&lft,&rgt,&nl,&nr); t=rand()%(nr-nl+1)+nl; } else sscanf(s[i],"<%c,%c>*%d",&lft,&rgt,&t); } else sscanf(s[i],"<%c,%c>",&lft,&rgt); while(t--)printf("%c",rand()%(rgt-lft+1)+lft); printf("\n"); } else printf("%s\n",s[i]); } } } int main() { freopen("Input.txt","w",stdout); srand((unsigned)time(NULL)); while(~scanf("%s",s[++sum]))if(strstr(s[sum],"EOF"))break; solve(1,sum-1,1); }
#工具:格式化隨機數據發生