NOIP信息奥赛--1995“同创杯”初中复赛题题解(二)
生活随笔
收集整理的這篇文章主要介紹了
NOIP信息奥赛--1995“同创杯”初中复赛题题解(二)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
NOI’95 “同創(chuàng)杯”全國青少年信息學(xué)(計算機(jī))奧林匹克競賽
分區(qū)聯(lián)賽復(fù)賽測試數(shù)據(jù)(初中組)
第二題:
解析:
本題,主要是循環(huán)體的運用,綜合難度比較大。循環(huán)體結(jié)構(gòu)的設(shè)計是本題的解題關(guān)鍵。
具體代碼如下:
#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; //定義層數(shù)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 的奇偶影響循環(huán)次數(shù)}cout<<loop; //輸出循環(huán)次數(shù)int addtemp = 0;while(loop>0) //每一次的循環(huán)來來決定四個邊長的數(shù)字{//計算當(dāng)前圈的起點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){//第一行中間幾個數(shù)字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;}}}輸出:
附注:
該題的難度比較大,對初中生來說,要求還是高了點。不過針對這類的題型還是可以通過一定量的練習(xí)來提高解題的速度。
總結(jié)
以上是生活随笔為你收集整理的NOIP信息奥赛--1995“同创杯”初中复赛题题解(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NOIP信息奥赛--1995“同创杯”初
- 下一篇: NOIP信息奥赛--1995“同创杯”初