博文

实时控制输入内容的长度(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......

阅读全文(3353) | 评论:3

[转载]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 标准中,只有以下两种定义方式是正确的:         ......

阅读全文(9473) | 评论:22

有重复元素的全排列输出(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......

阅读全文(7010) | 评论:14

超高精度算阶乘(快速)(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......

阅读全文(7573) | 评论:24

生成奇数阶等和幻方代码(超短)(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......

阅读全文(4657) | 评论:10

(转载)提问的艺术(2007-03-29 09:52:00)

摘要:如何获取帮助  在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案。  首先你必须明白,黑客们只偏爱艰巨的任务,或者能激发他们思维的好问题。如若不然,我们还来干吗?如果你有值得我们反复咀嚼玩味的好问题,我们自会对你感激不尽。好问题是激励,是厚礼,可以提高我们的理解力,而且通常会暴露我们以前从没意识到或者思考过的问题。对黑客而言,“问得好!”是发自内心的大力称赞。  尽管黑客们有蔑视简单问题和不友善的坏名声,有时看起来似乎我们对新手,对知识贫乏者怀有敌意,但其实不是那样的。  我们不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。我们称这样的人为“失败者”(由于历史原因,我们有时把它拼作“lusers”)。  我们在很大程度上属于志愿者,从繁忙的生活中抽出时间来解惑答疑,而且时常被提问淹没。所以我们无情的滤掉一些话题,特别是抛弃那些看起来象失败者的家伙,以便更高效的利用时间来回答胜利者的问题。  如果你觉得我们过于傲慢的态度让你不爽,让你委屈,不妨设身处地想想。我们并没有要求你向我们屈服--事实上,我们中的大多数人最喜欢公平交易不过了,只要你付出小小努力来满足最起码的要求,我们就会欢迎你加入到我们的文化中来。但让我们帮助那些不愿意帮助自己的人是没有意义的。如果你不能接受这种“歧视”,我们建议你花点钱找家商业公司签个技术支持协议得了,别向黑客乞求帮助。  如果你决定向我们求助,当然不希望被视为失败者,更不愿成为失败者中的一员。立刻得到有效答案的最好方法,就是象胜利者那样提问——聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。 提问之前  在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到:  1.通读手册,试着自己找答案。  2.在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。  3.在网上搜索(个人推荐google~~~)。  4.向你身边精于此道的朋友打听。  当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿......

阅读全文(6737) | 评论:31

数字迷通解程序(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......

阅读全文(3532) | 评论:5

解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;}......

阅读全文(7593) | 评论:25

关于两组有序数据组合成一组有序数据的问题(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......

阅读全文(4109) | 评论:9

列举完全数快速算法(瞬间列出前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;}......

阅读全文(4945) | 评论:11