zoukankan      html  css  js  c++  java
  • 第14、15週PTA題目的處理

    題目1 選擇法排序

    1.實驗代碼

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
      int n,index,exchange,i,j;
      scanf("%d
    ",&n);
      int num[n];
      for(index=0;index<n;index++)
      scanf("%d ",&num[index]);
      for(i=0;i<n-1;i++)
      {
        for(j=i+1;j<n;j++)
        {
          if(num[j]>num[i])
          {
            exchange=num[j];
            num[j]=num[i];
            num[i]=exchange;
          }
          else
          continue;
        }
      }
      for(index=0;index<n;index++)
      {
        if(index==0)
        printf("%d",num[index]);
        else
        printf(" %d",num[index]);
      }
      system("pause");
      return 0;
    }

    2.設計思路

    (1)算法

    第一步:輸入整數的個數n,定義數組num[n]

    第二步:按照順序輸入整數存入num[n]

    第三步:外循環變量i=0,內循環變量j=i+1

    第四步:若num[i]<num[j],則交換num[i]和num[j]

    第五步:j++,若j>=n,則i++,若i>=n-1,則下一步,否則跳到上一步

    第六步:輸出num[n]中的數,第二個數開始前面跟上空格

    (2)流程圖

    3.本題調試過程碰到問題及解決辦法

    (注:圖片在保存後成了問號,沒有副本)

    問題:在做交換時,內外循環都用了一個循環變量,導致進行完第一次內循環外循環就停止了

    解決辦法:在內外循環中使用兩個不同的循環變量

    題目2 輸出數組元素

    1.實驗代碼

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
      int n,index,difference;
      scanf("%d
    ",&n);
      int num[n];
      for(index=0;index<n;index++)
      scanf("%d ",&num[index]);
      for(index=1;index<n;index++)
      {
        difference=num[index]-num[index-1];
        printf("%d",difference);
        if(index+1==n)
        printf("
    ");
        else if(index%3!=0)
        printf(" ");
        else
        printf("
    ");
      }
      system("pause");
      return 0;
    }

    2.設計思路

    (1)算法

    第一步:輸入整數元素個數n

    第二步:按照順序輸入整數存入num[n]中

    第三步:循環變量index=1,若index<n,則後項減前項的差difference=num[index]-num[index-1],輸出difference,否則結束

    第四步:若index+1=n,則輸出回車,否則判斷index mod 3不等於0,若是則輸出空格,否則輸出回車

    第五步:index++,跳到第三步

    (2)流程圖

    3.本題調試過程碰到問題及解決辦法

    (注:圖片在保存後成了問號,沒有副本)

    問題:輸出元素時最後一個不是三的倍數會輸出空格,第一個數也會輸出空格

    解決辦法:判斷輸出的這個數是不是最後一個數,如果是的話就輸出回車,不是的話就判斷輸出的元素是不是3的倍數

    題目3 數組元素循環右移問題

    1.實驗代碼 

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
      int N,M,index,exchange;
      scanf("%d %d
    ",&N,&M);
      int num[N],item[N];
      for(index=0;index<N;index++)
      scanf("%d ",&num[index]);
      for(index=0;index<N;index++)
      {
        if(index+M>=N)
        item[(index+M)%N]=num[index];
        else
        item[index+M]=num[index];
      }
      for(index=0;index<N;index++)
      {
        if(index==0)
        printf("%d",item[index]);
        else
        printf(" %d",item[index]);
      }
      system("pause");
      return 0;
    } 

    2.設計思路

    (1)算法

    第一步:輸入兩個正整數元素個數N,右移位數M

    第二步:按照順序輸入各個整數存入num[N]中

    第三步:循環變量i=0

    第四步:若i>=N,跳到第七步

    第五步:若i+M>=N,則項item[(i+M) mod N]=num[i],否則item[i+M]=num[i]

    第六步:i++,跳到第四步

    第七步:輸出item[index],第二個數前輸出一個空格

    (2)流程圖

    3.本題調試過程碰到問題及解決辦法

    問題:沒有考慮M比N大的情況

    解決辦法:當前值的下標與M和的餘數剛好是輸出值的下標,不管M是不是N的倍數都是一樣的

     Git地址:https://git.coding.net/MemoriesBook/123.git

    個人總結

    本週學習了一維數組和二維數組,了解了二維數組的框架結構,如同行和列的數字的排列,下標還是和一維數組一樣的0到n-1,二維數組可以存放矩陣一類的數字,還可以進行矩陣的運算以及各種變換,其中有點難懂的是選擇法排序和冒泡法排序容易搞混,現在還不是很理解選擇法排序的意思,暫時先記住格式,寫在書上。

    董欣的博客地址:http://www.cnblogs.com/dx2017/p/7967269.html

    董雅潔的博客地址:http://www.cnblogs.com/exo123/p/7954060.html

    馮子旋的博客地址:http://www.cnblogs.com/fengzx/p/7955263.html

    代碼行數 時間 博客字數 時間 涉及的知識點
    200 11.20 10 4 數組
    100 11.21 10 4.5 數組
    100 11.22 300 2 if語句、循環結構
    200 11.23 50 3 數組
    100 11.24 50 1.5 數組
    200 11.25 100 2.5
    300 11.26 100 3 無 
    300 11.27 0 2.5 二維數組 
    100 11.28 0 3.5 二維數組 
    200 11.29 60 5 二維數組 
    100 11.30 60 1 二維數組 
    300 12.1 90 2 二維數組 
    300 12.2 100 1.5 二維數組 

     

  • 相关阅读:
    开始我的博客园
    科技生态链
    程式建议
    如何自动识别判断url中的中文参数是GB2312还是Utf-8编码?
    jquery.cookie 使用方法
    数据结构(Java)——查找和排序(5)
    数据结构(Java)——查找和排序(4)
    数据结构(Java)——查找和排序(3)
    数据结构(Java)——查找和排序(2)
    数据结构(Java)——查找和排序(1)
  • 原文地址:https://www.cnblogs.com/lixiaojing/p/7878001.html
Copyright © 2011-2022 走看看