社区讨论

新手解题答案

P2615[NOIP 2015 提高组] 神奇的幻方参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@miyqvw9a
此快照首次捕获于
2025/12/09 23:38
3 个月前
此快照最后确认于
2025/12/10 06:30
3 个月前
查看原帖
这里是作为一个刚学习C++的新手写的代码,然后加入了一些自己的看法和注释,希望对于各位新手朋友有所帮助。 当然也非常欢迎各位大佬指正和优化我的程序!
CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int N,medium,count=0;//N为输入容量,count为计数器用来输出用 
    cin>>N;//输入N 
    int arr[N][N]={};//给数组放空 
    medium=(N-1)/2;//计算正中间数 
    int a[N*N];//给出数组大小 
    arr[0][medium]=1;//定义中间为1 
    for(int K=2;K<=N*N;K++)//开始历遍数组 
    {
        int k=K-1;//将K-1用k表示 
        for(int i=0;i<N;i++)//历遍行数 
        {
            for(int n=0;n<N;n++)//历遍列数 
            {
                if(arr[i][n]==k && i==0 && n!=N-1)
                    arr[N-1][n+1]=K;//完成第一条 
    
                else if(arr[i][n]==k && i!=0 && n==N-1)
                    arr[i-1][0]=K;//完成第二条 
                
                else if(arr[i][n]==k && i==0 && n==N-1)
                    arr[i+1][n]=K;//完成第三条 
                    
                else if(arr[i][n]==k && i!=0 && n!=N-1 && arr[i-1][n+1]==0)
                    arr[i-1][n+1]=K; //第四条(1) 
                    
                else if(arr[i][n]==k && i!=0 && n!=N-1 && arr[i-1][n+1]!=0)
                    arr[i+1][n]=K;//第四条(2) 

            }    
        }
    }
        for(int i=0;i<N;i++)//历遍行数 
        {
            for(int n=0;n<N;n++)//历遍列数 
            {
                if(count<N-1)//运用计数器,count可以从1开始,则count<N就行; 
                {
                    cout<<arr[i][n]<<" "; //输出 
                    count++;
                }
                else
				{
				cout<<arr[i][n]<<endl;
                count=0;	//每N次就重置计数器,如果count=1,那么这里重置也设置为1; 
				}
            } 
        }
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...