NOIP信息奥赛--1995“同创杯”初中复赛题题解(二)

NOI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛
分区联赛复赛测试数据(初中组)

第二题:

在这里插入图片描述
解析:

本题,主要是循环体的运用,综合难度比较大。循环体结构的设计是本题的解题关键。

具体代码如下:

#include <QCoreApplication>
#include<iostream>
//#include<stdio.h>

#include<cstdio>
#include<string.h>
using namespace std;


int sortPlace(int size);

void printNums(int size);

const int MAXN = 1000;
int numberlist[MAXN] = {};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //cout<<"helloworld!"<<endl;

    int size; //定义层数
    
    cout<<"please input size:"<<endl;

    cin>>size;

    cout<<"the size is :"<<size<<endl;

    sortPlace(size);

    printNums(size);

    return a.exec();
}


int sortPlace(int size)
{
    int diff_s = size;
    int loop = 1;

    if(size>2)
    {
      loop = size%2?size/2+1:size/2;   //size 的奇偶影响循环次数
    }


    cout<<loop;   //输出循环次数

    int addtemp = 0;

    while(loop>0)   //每一次的循环来来决定四个边长的数字
    {
        //计算当前圈的起点
       static int startNum = 0;

        for(int i = 1;i<=size;i++)
        {
           // //末列
            numberlist[diff_s*i-1+ (diff_s-1) *addtemp] = i +startNum ;
            //末行
            numberlist[(diff_s-1)*diff_s-1 + i -(diff_s-1)*addtemp] = size*2-i + startNum;
            //第一列
            numberlist[diff_s*(i-1)+(diff_s+1)*addtemp] = size*3-1-i + startNum;

        }
        if(size>=3)
        {
        //第一行中间几个数字
            for(int i = 1;i<=size-2;i++)
            {
                numberlist[i+(diff_s+1)*addtemp]=size*3-2+i + startNum;

            }
        }

        if(loop>=2)
        {
         startNum = size*4-4 +startNum;   //loop =1;

          cout<<"the start Num is:"<<startNum<<endl;
        }


        loop--;
        addtemp++;

        size =size-2;
        cout<<"the loop now is:"<<loop<<" "<<endl;
        cout<<"the size now is:"<<size<<endl;
   }
    return 0;
}

void printNums(int size)
{
   int totalNum = size*size;

    for(int i=0;i<totalNum;i++)
    {
        cout.width(4);
        cout<<numberlist[i]<<" ";
        if((i+1)%size == 0)
        {
            cout<<endl;
        }

    }

}

输出:

在这里插入图片描述

附注:

该题的难度比较大,对初中生来说,要求还是高了点。不过针对这类的题型还是可以通过一定量的练习来提高解题的速度。

NOIP(全国青少年信息学奥林匹克竞赛)是中国举办的一项顶尖竞赛,旨在选拔和培养青少年信息学人才。CSP(计算机科学与编程竞赛)是NOIP的初赛,包括提高组和普及组两个不同难度的竞赛。 从1995年到2021年,CSP提高组复赛持续不断地推陈出新。试的难度和内容与时俱进,反映了信息科技和计算机学科的发展趋势。 这些试涵盖了计算机科学与编程的各个领域,如数据结构、算法设计与分析、图论、动态规划等。这些题目不仅要求考生熟悉编程语言,还需要考生具备分析问、设计算法、优化程序的能力。因此,参加CSP的考生需要有扎实的计算机基础知识和编程技巧。 CSP试的设计目标是培养学生的创新思维、动手能力和问题解决能力。试往往是实际问的抽象化,考生需要将问拆解、建模,并设计出适用的算法和程序来解决。这种综合应用的能力培养能够提高学生的实践能力和创新能力,为他们今后的学习和工作打下坚实的基础。 此外,CSP试还注重培养学生的团队合作精神和竞技意识。复赛通常要求考生在限定时间内完成,这要求考生在有限的时间内高效地协作和解决问。 总之,NOIP CSP提高组复赛的不断更新和提高,以及其注重培养学生的综合能力,使得参加这项竞赛的学生能够更好地理解和应用计算机科学知识,为他们日后的学习和发展打下良好的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值