第三次作业--数组

1.思维导图

1475247-20181208134110404-2138600483.png

2.学习体会及代码量累计

2.1学习体会

数组的PTA作业与之前题目相比要多的多,在做的题过程当中发现我的查错能力较弱,做题比较慢,但在平时一道题如果解不出来就会有先放放的心态,想着慢慢解决,这就导致考试的时候快速分析哪里错误的能力不足,接下来做题的时候要锻炼紧张意识,锻炼查错的能力,在做题的时候规定好时间去完成,发现错误不能拖。数组和字符需要学习的内容比较多,我的问题是有些知识点虽然知道,但是在用的时候又会出问题,还是要多看看书吧。

2.2代码量

1475247-20181208212437089-535211088.png

3.PTA排名截图及我的得分

1475247-20181208223312409-1393324437.png
1475247-20181208223323399-637541973.png
1475247-20181208223333048-1152763348.png

一维数组总分:200(其中25分选做)我的得分:200
二维数组总分:105 我的得分:75
字符串总分:150 我的得分:124

4.PTA实验作业

4.1PTA实验作业1

4.1.1题目简介
7-5 冒泡法排序 
将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。
本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。
4.1.2算法分析
    for 0~N   
        输入数组a[i];
        int t;//临时变量
    for j=0~N
        for i=0~N
            if 有a[i]>a[i+1]
              {
              t=a[i];
              a[i]=a[i+1];
              a[i+1]=t;
              }
              //处理末尾没空格
          for i=0~N-2;
          {
             输出a[i];
             printf(" ");
             }      
             printf("%d",a[N-1];
             return 0;    
4.1.3代码截图

1475247-20181208134918153-540938512.png

4.1.4测试数据截图

1475247-20181208134934822-1604440703.png

1475247-20181208134955321-1794819805.png

1475247-20181208135009455-1532875982.png

4.1.5提交列表及说明

1475247-20181208121203727-647751881.png

Q1.虽然PTA一开始得了大部分分数,但是接下来的错误在哪就不知道出在那里,后来发现是循环内外部的的范围不准确。
A1.我用最好想的解决办法是内外部循环都从0~N开始,这样做循环次数就比较多。后来看到书上指针部分的内容,外部i从1~N;内部0~N-i;相比之下我的循环就要麻烦的多。
Q2.输出怎样处理
A2.我的方法是采用输出的时候控制for 循环的上限,最后一项再输出,还可以采用flag。

4.2PTA题目作业2

4.2.1题目简介
所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
4.2.2算法分析
int one, two, there,four;//上,下,左,右;
int X;//循环次数    int  f;//存放数据
 int lx[10][10];//定义二维数组
   输入  N;
     if(N%2==0)
         X=N/2;
          else
           X=(N-1)/2+1;
            上:one =N;下,左:four =there =N-1;右:two =N-2;
              for(i=1;i<=X)
            {
                   for(j=1;j<=one ;j++)
                   {
                     lx[row][col]=f;
                     col++;    换下一列加
                     f++;
                     }   
                     col--;row++;//数字六开始,右面四行四个数
                      for (j=1;j<=two;j++)  //右面第二个数
                         {
                          lx[row][col]=f;
                           row++;换下一行加
                           f++;
                           }
                             col--;                                
                            row--;
                         for(j=1;j<=there;j++)
                           {
                                  lx[row][col]=f;                 //下第一行 
                                 col--;  列减少
                                  f++;
                            }
                              row--;
                               col++;
                       for(j=1;j<=four;j++)
                           {
                             lx[row][col]=f;                           //左第一行 
                              row--;    行减
                              f++;
                             }
                         col++;
                          row++;
one=one-2;two=two-2;there=there-2;four=four-2;//循环一次减少循环次数行列的数多少 
       }
       for(row=0~N)
       for(col=0~N)
           printf(    lx[row][col])
           return 0;
4.2.3代码截图

1475247-20181208192805646-2050909110.png

1475247-20181208192830840-1241381819.png

4.2.4测试数据

1475247-20181208202302492-2064546930.png

1475247-20181208202328707-1752974347.png

1475247-20181208202339347-1532714384.png

4.2.5提交列表及说明

1475247-20181208192856672-2140970189.png

Q1.看到这道题时数据不好处理,首先时螺旋,还有数据的变化
A1.分别处理了上下左右面,随着循环的变化数据改变
Q2.出现数据不连续
A2.检查每一行的变化是否错误

4.3PTA作业3

4.3.1题目简介
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
4.3.2算法分析
int str[81];int temp ;
int len//计算数组长度
   gets(str);
   len=strlen(str);//计算字符串长度
    for(i=0~len;)
    {
       m=i;//选择排序
         for(j=i+1~len)
         {
              if(str[j]<str[m])
              {
              m=j; 
              }
          }
          在内循环外
          if(m!=i)      则交换str[m]与str[i];
    }
           输出第一项,控制前面无空格
            for(i=1~len)
               if(str[i]!=str[i-1])  //如果i后一项不等于i
                 printf   str[i];
                 return 0;
4.3.3代码截图

1475247-20181208193724988-1866988209.png
1475247-20181208193743505-1961228169.png

4.3.4测试数据

1475247-20181208202520709-844016228.png

1475247-20181208202539441-2075763940.png

1475247-20181208202549536-392768529.png

4.3.5提交列表及说明

1475247-20181208193815843-604458943.png

Q1.先排序,怎么删除数据?
A1.排序用选择排序法,删除数据可以直接在输出时判断前一项是否与后一项相同

5.代码互评

题目简介:
本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

同学的代码

1475247-20181212162722294-1796537750.png

我的代码
1475247-20181212162744097-2039285038.png

两者的区别:
同学的代码采用hash[b[i]]的方式处理AB字符串,而我的代码采用取字符长度的方式来处理AB字符串,我的代码还要有判断两个字符相等,同学的就不用考虑,同学的代码所采用的方式很值得学习

转载于:https://www.cnblogs.com/ttyppt/p/10087154.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值