shshsh_0510
发表于 2008-9-5 13:23:12
和直接输出对比一下,不知哪位仁兄还能给优化一下,哪怕少几个字符也好
#include <iostream>
#include <math.h>
using namespace std;
inti,j,t,p,q,z,d;
void test2(){
#define r(x) (int)(x>0?x+.5:x-.5)
#define O(x,n,k) r(1.4*n*x(.78*k/n))
#define g(n,k,x) ((abs(x)<n?x:n*x/abs(x))+3)
for(i=1;i<64;i++){p=sqrt(i);t=p%2?(p+1)/2:p/2;z=i-4*t*t+3*t;d=i;}
for(i=0;i<64;i++)cout<<(i%8?"\t":"\n")<<64-d;
}
void test1(){
cout<<"1 2 3 4 5 6 7 8\n28 29 30 31 32 33 34 "
<<"9\n27 48 49 50 51 52 35 10\n26 47 60 61 62 53 36 11\n25 46 59 64 63 54 37 12\n24 45 58 57 56 55 38 13\n"
<<"23 44 43 42 41 40 39 14\n22 21 20 19 18 17 16 15";
}
void main(){
test2();
cout<<endl;
test1();
}
shshsh_0510
发表于 2008-9-5 13:48:45
变量j p q 可以省去,如果有round函数,第一个宏可以省去,则比直接输出大概长了下面两句的长度
inti,j,t,p,q,z,d;
#define O(x,n,k) round(1.4*n*x(.78*k/n))
我是想不出其他法子了
shshsh_0510
发表于 2008-9-5 14:33:44
再少几个字符 :)#include <iostream>
#include <math.h>
int i,t,z,d;
void main(){
#define r(x) (int)(x>0?x+.5:x-.5)
#define g(x) ((abs(x)<t?x:t*x/abs(x))+3)
#define f(x) for(i=x;i<64;i++)
f(1){t=sqrt(i);t=t%2?(t+1)/2:t/2;z=i-4*t*t+3*t;d=i;}
f(0) std::cout<<(i%8?"\t":"\n")<<64-d;
}
[ 本帖最后由 shshsh_0510 于 2008-9-5 15:11 编辑 ]
shshsh_0510
发表于 2008-9-5 15:00:18
改出错了:P
kofeffect
发表于 2008-9-5 16:22:29
人工填充,有内到外,好长啊:L
#include<stdio.h>
#define MAX 8
void main()
{
int iSquare = MAX*MAX;
int i = 0,j=0,k=0;
int iArr = {0};
bool bEnd = false;
int hSub,lSub;
bool hFlag,lFlag;
if (MAX<2)
return;
if (MAX%2==0)//even
{
hSub = MAX/2;
lSub = MAX/2-1;
hFlag = false;
lFlag = true;
}
else//odd
{
hSub = (MAX-1)/2;
lSub = (MAX-1)/2;
hFlag = true;
lFlag = false;
}
iArr= iSquare--;
for (i=0;;i++)
{
for (j=0; j<=i; j++)//列
{
if (lFlag){
lSub++;
}
else{
lSub--;
}
iArr= iSquare--;
if (iSquare == 0){
bEnd = true;
break;
}
}
lFlag = !lFlag;
if (bEnd == true){
break;
}
for (k=0; k<=i; k++)//行
{
if (hFlag){
hSub++;
}
else{
hSub--;
}
iArr = iSquare--;
}
hFlag = !hFlag;
}
for (i=0;i<MAX;i++)
{
for (j=0;j<MAX;j++)
{
printf("%3d ",iArr);
}
printf("\n");
}
}
shshsh_0510
发表于 2008-9-5 16:31:16
再少几个字符:)#include <iostream>
#include <math.h>
int i,t,d;
void main(){
#define r(x) ((int)(x>0?x+.5:x-.5))
#define g(x) ((abs(x)<t/2?x:t*x/2/abs(x))+3)
#define f(x) for(i=x;i<64;i++)
f(1){t=sqrt(i);t+=t%2;d=i;}
f(0) std::cout<<(i%8?"\t":"\n")<<64-d;
}
无心人
发表于 2008-9-5 16:37:46
:)
晕
BT了
用#define就流于形式化了阿
mathe
发表于 2008-9-5 17:13:40
其实用c版本应该更加短,比如main函数前面void可以不写,全局变量申明int可以省略,除了math.h头文件可以不包含.不过这种优化觉得意思不大
shshsh_0510
发表于 2008-9-5 17:26:14
原帖由 mathe 于 2008-9-5 17:13 发表 http://bbs.emath.ac.cn/images/common/back.gif
全局变量申明int可以省略
这个怎么省略呀?
mathe
发表于 2008-9-5 17:47:38
比如c程序
i,j,main(){for(i=1,j=0;i<=100;j+=i,i++);printf("%d\n",j);}
是合法的c程序.(注意如果在Visual Studio上编译,将文件名后缀设为.c,同样在Linux下,要用gcc而不是g++编译)