<pre id=\"best-answer-content\" class=\"reply-text mb10\">#include \"stdafx.h\"
#include stdio.h
int main()
{
int n,i,j,k=1,b;
scanf(\"%d\",
if(n==0) return 0;
k=n;//for(i=1;in;i) k=k*2;这是想求2^n吧? k=1;k=n;等效于k=2;k=pow(2,n)
b=k1;/*b=k1等效于b=k/2;对于b=k/(2^n),也可用b=kn代替,且效率会高些*/
for(i=0;ik 1;i)
{
for(j=0;jk 1;j)
{
if(i==0||i==b||i==k)putchar(\'*\');
else if(j==0||j==b||j==k) putchar(\'*\');
else putchar(\' \');
}
printf(\"\\n\");
}
return 0;
}
/*
位运算是C语言的特色,通过位运算符可对数据进行位操作,这也是C语言接近汇编的原因。
在适当的地方用位操作能提高效率。
位操作符有:
左移 一个数在计算机中以二进制储存、运算,比如5,二进制位101,左移三位,得101000,表示40
可以看出,左移等效于成2^n:如上,40=5*(2^3)(对应101000=1013)
右移 等效于除以2^n
此外,位运算符还有:按位与defds123, 按位或|, 按位异或^等等
比如计算a=a,可以用a=adefds12315,代替 (凡是被余数为2^n的,皆可用a=adefds123(2^n-1) )算,比取余运算快
*/
<h4 class=\"ask\">追问
<pre class=\"replyask-text\" id=\"content-2470887\">这方面推荐一本书看吧,我做了好几道题,都是因为 Time Limit Exceeded通不过 ,谢谢。。。 |