博文

实时控制输入内容的长度(2007-04-13 20:23:00)

摘要:以下代码(GetStringEX函数)能实现在控制台下有类似WindowsGDI界面的文本框最大输入文本长度的那种效果,个人感觉效果不错哈哈

#include <stdio.h>    //putchar
#include <conio.h>    //getch
#include <windows.h>  //MessageBeep

int GetStringEX(char* cpBuffer,int nMaxChars)
{
    int cInput, nCount = 0;
    while( (cInput = getch()) != '\r' )
    {
        if(cInput == '\b') //BackSpace
        {
            if(nCount > 0)
            {
                nCount--, printf("\b \b");
......

阅读全文(3233) | 评论: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 标准中,只有以下两种定义方式是正确的:

 ......

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

有重复元素的全排列输出(2007-04-07 15:01:00)

摘要:例如,输入aabc,按字典顺序输出:
aabc
aacb
abac
abca
acab
acba
baac
baca
bcaa
caab
caba
cbaa

偶的代码如下:
#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[......

阅读全文(6912) | 评论: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;
        ......

阅读全文(7406) | 评论: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++)//计算生成
       ......

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

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

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

阅读全文(6623) | 评论: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]++;
  ......

阅读全文(3414) | 评论: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;
}
......

阅读全文(7474) | 评论: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;
}

//主函数main
int main(void)
{
    char a[256]={0},b[256]={0},c[512]={0};
 &......

阅读全文(4012) | 评论: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;
}......

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