博文
实时控制输入内容的长度(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");
......
[转载]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,按字典顺序输出:
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[......
超高精度算阶乘(快速)(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;
......
生成奇数阶等和幻方代码(超短)(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++)//计算生成
......
(转载)提问的艺术(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]++;
 ......
解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;
}
//主函数main
int main(void)
{
char a[256]={0},b[256]={0},c[512]={0};
&......
列举完全数快速算法(瞬间列出前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;
}......