我的代码日志1

最近老师发了有关幻方的代码,我就上网查了幻方的公式,尝试着写了一次。还是有很多不足的地方,先记录下来吧。

#include<iostream>
#include<iomanip>
using namespace std;
void main(){
int n=1;
cout<<"请输入奇数阶n,n的平方小于10000当输入的是负数时停止运算"<<endl;
HHH: for(;n>0;){//死循环实现n的多次运算停止循环的条件是n为负数
cin>>n;//当输入的数是负数时还是进行了一次不必要的运算
if(n%2==0){cout<<"您输入的是偶数请重新输入"<<endl;goto HHH;}//goto语句实现多次输入错误时出现提示
else {int a[10000],b[100][100];
int i,j,k,w,t;
for(i=0;i<10000;i++)
a[i]=i;//建立一个数组存放1到n的平方个数
for(i=0;i<n;i++)
for(j=0;j<n;j++)
b[i][j]=0;//二维数组先进行初始化为0;再将a【】数组中的数赋值给对应位置的b【】【】
i=0;
j=(n-1)/2;
b[i][j]=a[1];
for(k=2;k<=(n*n);k++){
w=i;
t=j;
j+=1;
i-=1;
if(i==-1&&j!=n)i=(n-1);//幻方是将下一个数放在上一个数的右上方故会出现当i为0或j为n-1时移动位置后出现出界现象
else if(j==n&&i!=-1)j=0;
else if(i==-1&&j==n){
i=(n-1);j=0;}
else ;
if(b[i][j]==0){
b[i][j]=a[k];//当上一个数的右上方已经赋值过时下一个数放在这个数的下方故需先判断右上方是否已经赋值过由于数组初始化为0,若数组元素变为非0时即为赋值过
}
else{
w+=1;
if(w==n)w=0;
 b[w][t]=a[k];//当上一个数的右上方已经赋值过时下一个数放在这个数的下方
 i=w;
 j=t;
}
}
for(i=0;i<n;i++){//输出幻方
for(j=0;j<n;j++)
cout<<setw(3)<<b[i][j]<<" ";
cout<<endl;}
}
}
}
//不足:可读性差,应多利用结构体,类,调用函数;占用大量内存运算时间长

我大概的看了老师的代码,还是他的比较好,运用了还没教的类,篇幅段可读性强,过几天吧,先好好练习一下类,之后再敲一篇代码。

说回自己的代码可是花了我不少功夫,为了实现多次运算,第一次从舍友那里得知可以用死循环。本来想如果使用者输入的是偶数时要显示出错误提示的,为了防止输入多次偶数时能重复提示第一次使用了goto语句,虽然c++老师不建议使用goto语句,但暂时也想不出其他的方法就先用着吧!针对这些不足看来需要点时间啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值