user-0 提问: 把一句打乱的话重组

回复:
user: user-1
content: 要不你去 高性能 算法模块问问？

user: user-1
content: 采用树结构 数据字典？ 这个算法不是很清楚~~~~

user: user-2
content: 仅供参考：#include <time.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> char *family="王李张刘陈杨黄赵吴周徐孙马朱胡郭何高林罗郑梁谢宋唐许韩冯邓曹彭"              "曾肖田董袁潘于蒋蔡余杜叶程苏魏吕丁任沈姚卢姜崔钟谭陆汪范金石廖"              "贾夏韦傅方白邹孟熊秦邱江尹薛闫段雷侯龙史陶黎贺顾毛郝龚邵万钱严"              "覃武戴莫孔向汤"; char  *boyname="伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生"                "龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中"                "茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友"                "裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭"                "鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘"; char *girlname="秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳"                "素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦"                "晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊"                "薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育"                "滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽"; char  *mixname="澜华秋娣桂凤旭先丽娜朋政香致仁晨云雅柔泰宜宁善荷娅腾霭妍彬欢媛琼婉"                "青树淑浩露彩风红璧璐杰波萍全纨纯江义君健飞羽震春振凡薇龙才航豪德翔"                "胜思黛菁发爽园克昌茂艳军嘉影进珠辉朗炎环永姬婵丹瑾维世荔勇枫刚蓓毅"                "惠亨保士雄琬霄素友群哲强勤康芸峰筠元菊若厚鸣英志楠达东亚锦艺兰仪慧"                "山可广霞国娟信武清兴琰中庆聪成翰冠贵言婕馨心卿琛菲裕芝诚伊学榕固荣"                "晶博娴希梁雁妹松瑞苑燕邦策斌翠珊月飘河美姣育宁子力时民昭怡明辰蕊奇"                "功莎叶眉会栋冰新磊承轮瑶馥之伯彪建茜寒林坚敬安岩欣颖莺祥海茗良悦乐"                "启巧晓以亮盛有婷爱梅顺壮宏生竹谦倩莲玉钧思玲利真平滢韵佳珍琳琴洁福"                "娥静莉星超和凝家伟光梦文芳瑗融舒富岚天琦雪泽弘咏枝秀芬贞绍鹏蓉涛伦"                "行俊毓"; FILE *fp; char tmp[2000*(6+1)+1]; int make(char *filename , char *bgx , int bgxnum) {     int num,i,n,y,z;     while (1) {         puts("\n注意:一次最多能生成2000个.\n");         printf("你准备生成多少个姓名?：");         fflush(stdout);         rewind(stdin);         scanf("%d",&num);         if (1<=num && num<=2000) break;     }     fp=fopen(filename,"r");     if (fp!=NULL) {         int x;         fclose(fp);         printf("警告:准备生成的%s已经存在!\n",filename);         puts(" 1.追加文件内容");         puts(" 2.覆盖文件内容");         puts(" 0.取消本次操作");         printf("请做出选择：");         fflush(stdout);         rewind(stdin);         scanf("%d",&x);         switch (x) {         case 0:             puts("\n已经取消本次操作!");             getch();             return(0);         break;         case 1:             fp=fopen(filename,"a");             if (fp==NULL) {                 printf("追加%s文件内容失败!可能文件具有只读属性或者正被使用!",filename);                 getch();                 return(1);             }         break;         case 2:             fp=fopen(filename,"w");             if (fp==NULL) {                 printf("覆盖文件%s内容失败!可能文件具有只读属性或者正被使用!",filename);                 getch();                 return(1);             }         break;         default:             puts("你没有做出有效的选择,按任意键返回主菜单!");             getch();             return(0);         }     } else {         fp=fopen(filename,"w");         if (fp==NULL) {             puts("创建文件失败!!");             getch();             return(1);         }     }     y=0;z=1;     for (i=0;i<num;i++) {         n=rand()%100*2;         tmp[y]=family[n];         tmp[z]=family[n+1];         y+=2;         z+=2;         n=rand()%bgxnum*2;         tmp[y]=bgx[n];         tmp[z]=bgx[n+1];         y+=2;         z+=2;         if (rand()%2==1) {             n=rand()%bgxnum*2;             tmp[y]=bgx[n];             tmp[z]=bgx[n+1];             tmp[z+1]='\n';             y+=3;             z+=3;         } else {             tmp[y]='\n';             y++;             z++;         }     }     tmp[z-1]='\0';     fputs(tmp,fp);     fclose(fp);     printf("批量姓名已经输出到文件：%s",filename);     getch();     return(0); } int main() {     int slt;      srand(time(NULL));     while (1) {         puts("\n批量姓名生成器v1.0 By.morning----QQ:88072010\n");         puts(" 1.生成男子名");         puts(" 2.生成女子名");         puts(" 3.生成混合名");         puts(" 0.退出本程序");         puts("--------------------------------");         printf("请选择：");         fflush(stdout);         rewind(stdin);         scanf("%d",&slt);         switch (slt) {             case 1:make( "boyname.txt", boyname,150);break;             case 2:make("girlname.txt",girlname,149);break;             case 3:make( "mixname.txt", mixname,299);break;             case 0:return 0;             default: continue;         }     } }

user: user-2
content: http://www.cplusplus.com/reference/algorithm/shuffle/index.html

user: user-3
content: 无非就是加密，获取字库文件加密就行了

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:仅供参考：#include <time.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> char *family="王李张刘陈杨黄赵吴周徐孙马朱胡郭何高林罗郑梁谢宋唐许韩冯邓曹彭"              "曾肖田董袁潘于蒋蔡余杜叶程苏魏吕丁任沈姚卢姜崔钟谭陆汪范金石廖"              "贾夏韦傅方白邹孟熊秦邱江尹薛闫段雷侯龙史陶黎贺顾毛郝龚邵万钱严"              "覃武戴莫孔向汤"; char  *boyname="伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生"                "龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中"                "茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友"                "裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭"                "鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘"; char *girlname="秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳"                "素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦"                "晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊"                "薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育"                "滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽"; char  *mixname="澜华秋娣桂凤旭先丽娜朋政香致仁晨云雅柔泰宜宁善荷娅腾霭妍彬欢媛琼婉"                "青树淑浩露彩风红璧璐杰波萍全纨纯江义君健飞羽震春振凡薇龙才航豪德翔"                "胜思黛菁发爽园克昌茂艳军嘉影进珠辉朗炎环永姬婵丹瑾维世荔勇枫刚蓓毅"                "惠亨保士雄琬霄素友群哲强勤康芸峰筠元菊若厚鸣英志楠达东亚锦艺兰仪慧"                "山可广霞国娟信武清兴琰中庆聪成翰冠贵言婕馨心卿琛菲裕芝诚伊学榕固荣"                "晶博娴希梁雁妹松瑞苑燕邦策斌翠珊月飘河美姣育宁子力时民昭怡明辰蕊奇"                "功莎叶眉会栋冰新磊承轮瑶馥之伯彪建茜寒林坚敬安岩欣颖莺祥海茗良悦乐"                "启巧晓以亮盛有婷爱梅顺壮宏生竹谦倩莲玉钧思玲利真平滢韵佳珍琳琴洁福"                "娥静莉星超和凝家伟光梦文芳瑗融舒富岚天琦雪泽弘咏枝秀芬贞绍鹏蓉涛伦"                "行俊毓"; FILE *fp; char tmp[2000*(6+1)+1]; int make(char *filename , char *bgx , int bgxnum) {     int num,i,n,y,z;     while (1) {         puts("\n注意:一次最多能生成2000个.\n");         printf("你准备生成多少个姓名?：");         fflush(stdout);         rewind(stdin);         scanf("%d",&num);         if (1<=num && num<=2000) break;     }     fp=fopen(filename,"r");     if (fp!=NULL) {         int x;         fclose(fp);         printf("警告:准备生成的%s已经存在!\n",filename);         puts(" 1.追加文件内容");         puts(" 2.覆盖文件内容");         puts(" 0.取消本次操作");         printf("请做出选择：");         fflush(stdout);         rewind(stdin);         scanf("%d",&x);         switch (x) {         case 0:             puts("\n已经取消本次操作!");             getch();             return(0);         break;         case 1:             fp=fopen(filename,"a");             if (fp==NULL) {                 printf("追加%s文件内容失败!可能文件具有只读属性或者正被使用!",filename);                 getch();                 return(1);             }         break;         case 2:             fp=fopen(filename,"w");             if (fp==NULL) {                 printf("覆盖文件%s内容失败!可能文件具有只读属性或者正被使用!",filename);                 getch();                 return(1);             }         break;         default:             puts("你没有做出有效的选择,按任意键返回主菜单!");             getch();             return(0);         }     } else {         fp=fopen(filename,"w");         if (fp==NULL) {             puts("创建文件失败!!");             getch();             return(1);         }     }     y=0;z=1;     for (i=0;i<num;i++) {         n=rand()%100*2;         tmp[y]=family[n];         tmp[z]=family[n+1];         y+=2;         z+=2;         n=rand()%bgxnum*2;         tmp[y]=bgx[n];         tmp[z]=bgx[n+1];         y+=2;         z+=2;         if (rand()%2==1) {             n=rand()%bgxnum*2;             tmp[y]=bgx[n];             tmp[z]=bgx[n+1];             tmp[z+1]='\n';             y+=3;             z+=3;         } else {             tmp[y]='\n';             y++;             z++;         }     }     tmp[z-1]='\0';     fputs(tmp,fp);     fclose(fp);     printf("批量姓名已经输出到文件：%s",filename);     getch();     return(0); } int main() {     int slt;      srand(time(NULL));     while (1) {         puts("\n批量姓名生成器v1.0 By.morning----QQ:88072010\n");         puts(" 1.生成男子名");         puts(" 2.生成女子名");         puts(" 3.生成混合名");         puts(" 0.退出本程序");         puts("--------------------------------");         printf("请选择：");         fflush(stdout);         rewind(stdin);         scanf("%d",&slt);         switch (slt) {             case 1:make( "boyname.txt", boyname,150);break;             case 2:make("girlname.txt",girlname,149);break;             case 3:make( "mixname.txt", mixname,299);break;             case 0:return 0;             default: continue;         }     } }   谢谢您的耐心回答，我先试试，谢谢！

user: user-4
content: 中文是博大精深的，同一句话打乱后可能重组成N种不同的意思，如果那么方便就实现，老外学中文语法就不用那么困难了，只要把想说的词拿来组合一下就生成了

user: user-2
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <time.h> int d[6]; int i,n,a,b,t; int c,j; void main() {     srand(time(NULL));     printf("shuffle 0..n-1 demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=0;i<n;i++) d[i]=i;/* 填写0～n-1 */             for (i=n;i>0;i--) {/* 打乱0～n-1 */                 a=i-1;b=rand()%i;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=0;i<n;i++) printf("%d",d[i]);             printf("\n");         }     }     printf("shuffle 1..n demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=1;i<=n;i++) d[i]=i;/* 填写1～n */             for (i=n;i>1;i--) {/* 打乱1～n */                 a=i;b=rand()%i+1;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=1;i<=n;i++) printf("%d",d[i]);             printf("\n");         }     } }