博文
实时控制输入内容的长度(2007-04-13 20:23:00)
摘要:以下代码(GetStringEX函数)能实现在控制台下有类似WindowsGDI界面的文本框最大输入文本长度的那种效果,个人感觉效果不错哈哈#include <stdio.h> //putchar#include <conio.h> //getch#include <windows.h> //MessageBeepint GetStringEX(char* cpBuffer,int nMaxChars){ int cInput, nCount = 0; while( (cInput = getch()) != '\r' ) { if(cInput == '\b') //BackSpace { if(nCount > 0) { nCount--, printf("\b \b"); &nbs......
[转载]C/C++语言误区之:void main( )(2007-04-11 18:29:00)
摘要:C/C++语言误区之:void main( )作者:antigloss 很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.( void main( ) 从来就不存在于 C++ 或者 C )。下面我分别说一下 C 和 C++ 标准中对 main 函数的定义。 1. C 在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language 2e(《C 程序设计语言第二版》)用的就是 main( )。不过在最新的 C99 标准中,只有以下两种定义方式是正确的:  ......
有重复元素的全排列输出(2007-04-07 15:01:00)
摘要:例如,输入aabc,按字典顺序输出:aabcaacbabacabcaacabacbabaacbacabcaacaabcabacbaa偶的代码如下:#include <stdio.h>int main(){ long nt,n1,n2,nLen; char cIn[100],ct; long nNum[100]={0}; scanf("%s",cIn); //输入字符串 { char *pc=cIn,*pc2; for(;*pc;pc++)for(pc2=pc+1;*pc2;pc2++)//排序,按ASCII if(*pc>*pc2)ct=*pc,*pc=*pc2,*pc2=ct; nLen=pc-cIn; while(nNum[nLen]==0) { char cT[100],cOut[100]={0},*pcOut=cOut; for(n1=0;n1<=nLen;n1......
超高精度算阶乘(快速)(2007-03-31 00:49:00)
摘要://以10进制输出结果,本程序计算1000!用时不到50ms#include <stdio.h>#include <conio.h>#include <time.h> //用于计时#define MaxNum 10000 //阶乘最大的数(最高位数)//如果要算更大的n!请自行修改此值void LargeNumberTimes(long *num,long &nMax,long nTimes){ long z1,z2,z3=0; for(z1=0;z1<=nMax;z1++) { if((z2=num[z1]*nTimes+z3)>=10000) { z3=z2/10000,z2%=10000; if(z1==nMax)nMax++; } else z3=0; num[z1]=z2; }}int main(){//雨中飞燕之作; &nbs......
生成奇数阶等和幻方代码(超短)(2007-04-14 08:55:00)
摘要:很短,但应该不是最短,仅用循环来完成#include <stdio.h> //头文件
版本一(数字1在中间偏右):int main(){ long nList[19][19],n=0,n1,n2,nh; while(n%2==0)scanf("%d",&n);//输入阶数 for(n2=n*n,n1=0,nh=n/2;n1<n2;n1++)//计算生成 nList[(n1*(n-1)+nh+n1/n)%n][(n1+nh+1+n1/n)%n]=n1+1; for(n2=0;n2<n;n2++)//结果输出 { for(n1=0;n1<n;n1++)printf("%4d",nList[n2][n1]); printf("\n"); } return 0;}版本二(数字1在第一行中间):int main(){ long nList[31][31],n=0,n1,n2; while(!(n&1))scanf("%d",&n);//输入阶数 for(n2=n*n,n1=0;n1<n2;n1++)//计算生成 nList[(n1*(n-1)+(n1/n)*2)%n][(n1+(n>>1)-n1/n)%n]=n1+1; for(n2=0......
(转载)提问的艺术(2007-03-29 09:52:00)
摘要:如何获取帮助 在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案。 首先你必须明白,黑客们只偏爱艰巨的任务,或者能激发他们思维的好问题。如若不然,我们还来干吗?如果你有值得我们反复咀嚼玩味的好问题,我们自会对你感激不尽。好问题是激励,是厚礼,可以提高我们的理解力,而且通常会暴露我们以前从没意识到或者思考过的问题。对黑客而言,“问得好!”是发自内心的大力称赞。 尽管黑客们有蔑视简单问题和不友善的坏名声,有时看起来似乎我们对新手,对知识贫乏者怀有敌意,但其实不是那样的。 我们不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。我们称这样的人为“失败者”(由于历史原因,我们有时把它拼作“lusers”)。 我们在很大程度上属于志愿者,从繁忙的生活中抽出时间来解惑答疑,而且时常被提问淹没。所以我们无情的滤掉一些话题,特别是抛弃那些看起来象失败者的家伙,以便更高效的利用时间来回答胜利者的问题。 如果你觉得我们过于傲慢的态度让你不爽,让你委屈,不妨设身处地想想。我们并没有要求你向我们屈服--事实上,我们中的大多数人最喜欢公平交易不过了,只要你付出小小努力来满足最起码的要求,我们就会欢迎你加入到我们的文化中来。但让我们帮助那些不愿意帮助自己的人是没有意义的。如果你不能接受这种“歧视”,我们建议你花点钱找家商业公司签个技术支持协议得了,别向黑客乞求帮助。 如果你决定向我们求助,当然不希望被视为失败者,更不愿成为失败者中的一员。立刻得到有效答案的最好方法,就是象胜利者那样提问——聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。
提问之前 在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到: 1.通读手册,试着自己找答案。 2.在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。 3.在网上搜索(个人推荐google~~~)。 4.向你身边精于此道的朋友打听。 当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿......
数字迷通解程序(2007-03-29 08:35:00)
摘要:#include <stdio.h>#include <conio.h>int main(){ int n1,n2,n3,n[11]={9,8,7,6,5,4,3,2,1,0,0},ns=0; while(n[10]==0) { if(n[9]<=1) //这部分按你题目需要修改 { //现在的代码计算的是a+bc+def=ghij n1=n[2]*10+n[1];n2=n[5]*100+n[4]*10+n[3]; n3=n[9]*1000+n[8]*100+n[7]*10+n[6]; if(n[0]+n1+n2==n3)ns++,printf("%d + %d + %03d = %04d\n",n[0],n1,n2,n3); }else break; //这里n[9]>1不可能再有解 n1=0;n[n1]++; while(n1>=0) &n......
解Joseph(约瑟夫)环问题的牛代码(2007-03-29 08:22:00)
摘要:摘录自本网站论坛(原作者不清楚,知情者请留言告诉偶)问题描述:n个人围成一个环,编号1-n,然后从1号开始报数,报m的出列,下一个人再从1开始报,求出列的人的编号顺序(或者求谁最后出列)#include <stdio.h>#include <conio.h>int main( void ){ int n, i = 0, m, p; scanf("%d%d", &n, &m); //n总人数,m步长 while( ++i <= n ) { p = i * m; while (p > n) p = p - n + (p - n - 1)/(m - 1); printf("%d\n", p); } getch();return 0;}......
关于两组有序数据组合成一组有序数据的问题(2007-03-26 18:35:00)
摘要:从小到大排序好的数据连接生成新的数据(也是从小到大),并且要去掉重复数据这里用字符串作为例子,完成本功能的函数是combineStr旨在示例一下指针的操控(运用了指向指针的指针)//字符串连接 *pTag 目标字符串 *pa和*pb要进行连接的字符串void combineStr(char *pTag ,char *pa,char *pb){ char **pp;pTag--; while(*pa||*pb) { if(!*pb || *pa && *pa<=*pb)pp=&pa;else pp=&pb; if(*pTag!=**pp)*++pTag=**pp;(*pp)++; }}//字符串排序void sort(char *cpStr){ char *pa,*pb,ct; for(pa=cpStr;*pa;pa++)for(pb=pa+1;*pb;pb++) if(*pa>*pb)ct=*pa,*pa=*pb,*pb=ct;}//主函数mainint main(void){ char a[256]={0},b[256]={0},c[512]={0}; scanf("%s",a);getchar();sort(a); scanf("%s",b);g......
列举完全数快速算法(瞬间列出前7个)(2007-03-25 20:33:00)
摘要:#include <stdio.h>#include <conio.h>#include <math.h>int main(){ for(long n=2,z1=3,z2,zq;n<=20;z1=(long)pow(2,++n)-1){ for(z2=2,zq=(long)sqrt(z1);z2<=zq;z2++)if(z1%z2==0)break; if(z2>zq)printf("%.lf\n",(pow(2,n-1)*z1)); } getch();return 0;}......
