第十四、十五周作业

7-10 简化的插入排序

1.实验代码

#include <stdio.h>
int main ()
{
  const int N=10;
  int n,i,j,m,a[N];
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    scanf("%d",&a[i]);
  }
  scanf("%d",&m);
  if(n==0)
  {
      printf("%d ",m);
   }else if(n==1)
   {
       if(m>a[0])
       printf("%d %d ",a[0],m);
       else
       printf("%d %d ",m,a[0]);
   }else
    {
        if(a[n-1]<m)
        {
            for(i=0;i<n;i++)
            {
                printf("%d ",a[i]);
            }
            printf("%d ",m);
        }
  for(i=0;i<n;i++)
  {
  if((a[i]<m)&&(m<a[i+1]))
  {
  j=i;
   for(i=0;i<=j;i++)
  {
   printf("%d ",a[i]);
  }
  printf("%d ",m);
 for(i=j+1;i<n;i++)
 {
  printf("%d ",a[i]);
 }
}
}
 if(a[0]>m)
 {
 printf("%d ",m);
  for(i=0;i<n;i++)
  {
      printf("%d ",a[i]);
  }
}
}
}

2 设计思路
(1)主要描述题目算法

a.先定义N=10,再定义数组a[N],输入一个整数n,i,i=0,在循环结构中对a[i]进行赋值,输入要插进去的数m。

b.根据输入n的值情况的不同进行讨论;及当m插入开头,中间,结尾进行分类。

c.最后输出排列过顺序的值。

(2)流程图

3.本题调试过程碰到问题及解决办法

遇到的问题是情况考虑的不全面,关于n=0时的情况;关于n=1时的情况;关于插入的值m在最前面及最后面的情况,这些一开始自己都没有写在程序中,后针对对测试点,完善代码。

7-1 求整数序列中出现次数最多的数

1.实验代码

#include <stdio.h>
int main ()
{
const int N=1000;
int number[N],i,n,j,count[N],max,m;
max=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&number[i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(number[i]==number[j])
count[i]=count[i]+1;
}
}
for(i=0;i<n;i++)
{
if(count[i]>max)
{
max=count[i];
m=i;
}
}
printf("%d %d",number[m],max);
return 0;
}

2 设计思路
(1)主要描述题目算法

a.对 number[N],i,n,j,count[N],max,m进行整型定义,N=1000,输入n,在循环结构中输入number[i]。

b.将number[i]数组中相同的数出现的次数与count[i]对应起来。

c.比较count[i]的最大值,并输出对应的number[m]。

(2)流程图

3.本题调试过程碰到问题及解决办法

一直错误在max在统计中多次更新,错误在for关于if(number[i]==number[j])双重循环中,一开始自己写的循环为for(i=0;i<n;i++);for(j=i;j<n-i;j++)这样的话,会使得之后的number[i]值不能和之前的number[j]值进行比较,会导致最后max的错误,甚至是结果的错误。

7-4 数组元素循环右移问题

1.实验代码

#include <stdio.h>
int main ()
{
  const int N=100;
  int number[N],m,n,i,tmp;
  scanf("%d %d",&n,&m);
  for(i=0;i<n;i++)
  {
    scanf("%d",&number[i]);
  }
  if(n>=m)
  {
      m=m;
  }else
  {
      m=m%n;
  }
  for(i=n-m;i<n;i++)
  {
    printf("%d ",number[i]);
  }
  for(i=0;i<n-m;i++)
  {
    printf("%d",number[i]);
    if(i<n-m-1)
    {
      printf(" ");
    }
  }
}

2 设计思路
(1)主要描述题目算法

a.对number[N],m,n,i,tmp进行整型定义,输入n,m,在for循环语句中输入number[i]。

b.判断第二行输入的n个整数与m的关系,根据不同的关系,将原本的数组顺序相应的向右移动m位。

c.最后输出移动过后的数组number[n]。

(2)流程图

3.本题调试过程碰到问题及解决办法

遇到的问题为没有考虑到当输入向右移的m位值大于输入的n个数,及当m为n的倍数时的情况,后来经过一步步的调试及对过程的了解后将情况补全。

7-3 选择法排序

1.实验代码

#include <stdio.h>
int main ()
{
  int a,i,j,min,tmp,number[10];
  scanf("%d",&a);
  for(i=0;i<a;i++)
  {
    scanf("%d",&number[i]);
  }
  for(i=0;i<a-1;i++)
  {
    for(j=0;j<a-i-1;j++)
    {
      if(number[j]<number[j+1])
      {
      tmp=number[j+1];
      number[j+1]=number[j];
      number[j]=tmp;
     }
    }
  }for(j=0;j<a;j++)
  {
  if(j+1==a)
  printf("%d",number[j]);
  else
  printf("%d ",number[j]);
}
}

2 设计思路
(1)主要描述题目算法

a.对a,i,j,min,tmp,number[10]进行整型定义,输入a,在for的循环语句中输入number[i]的值。

b.在for的双重循环中对number[j]和number[j+1]进行比较,如果number[j]<number[j+1],则将number[j]与number[j+1]进行交换。

c.在for循环语句中输出排好顺序后的数组number[j]。

(2)流程图

3.本题调试过程碰到问题及解决办法

遇到的问题在于没有弄懂它的比较交换的思路,一直将for双重循环的内循环条件弄错,应为j<a-i-1,而自己一直写成j<a-i,在上完课并重新理解过流程后,最终改正。

我的git地址:https://git.coding.net/exo07/disizhouzuoye.git

个人总结

在本周我学习关于一维数组,二维数组,还看了一些关于函数的书籍,学到了很多,特别是关于冒泡排序法,选择排序法,虽然对我来说难度不小,但自己已经大致了解了思路;不足的为考虑关于这方面问题时,自己会考虑的不全面,比如在按照顺序插入一个数时,自己只考虑到插到中间的情况。

时间: 2024-11-20 12:41:47

第十四、十五周作业的相关文章

中文数字转换成阿拉伯数字(一千二百三十四万五千六百七十八--&gt;12345678)

昨天老大问我又没有写过中文数字转换成阿拉伯数字,我说没有,我说那应该简单啊,就是将中文对应的数字换成阿拉伯数字就好了啊,比如一就换成1,二就换成2…十换成10.可是那么问题来了…… 一十二呢…不能是1102吧…这不就坑爹了吗?一百万呢………所有我苦苦思索,花费了我差不多半天的时间,终于写出了下面的程序. 1 public static void main(String[] args){ 2 3 Map<Character, String> numberMap = new HashMap<

《机电传动控制》第五周作业

机电传动控制第五周作业 一.传动电机或控制电机在工业或生活中的应用: 1.电气伺服传动领域 在要求速度控制和位置控制(伺服)的场合,特种电机的应用越来越广泛.开关磁阻电动机.永磁无刷直流电动机.步进电动机.永磁交流伺服电动机.永磁直流电动机等都已在数控机床.工业电气自动化.自动生产线.工业机器人以及各种军.民用装备等领域获得了广泛应用.如交流伺服电机驱动系统应用在凹版印刷机中,以其高控制精度实现了极高的同步协调性,使这种印刷设备具有自动化程度高.套准精度高.承印范围大.生产成本低.节约能源.维修

20179214 2017-2018-2 《密码与安全新技术》第五周作业

20179214 2017-2018-2 <密码与安全新技术>第五周作业 课程:<密码与安全新技术> 班级: 201792 姓名: 刘胜楠 学号:20179214 上课教师:谢四江 上课日期:2018年3月29日 必修/选修: 选修 学习内容总结 ICO众筹 所有成功的数字货币以及区块链(本文区块链指"区块链公有链")项目无一不是社区项目.常见的ICO里,数字货币和区块链项目向早期爱好者出售项目代币.项目团队通过ICO获取技术开发和市场拓展资金:而项目爱好者通过

软件项目管理第五周作业

1.psp Job Type Date Start End Total 四周总结 随笔 2016.4.4 23:00 23:23 23 站立会议 会议 2016.4.4 13:30 13:45 15 数据库 编码测试 2016.4.4 13:50 15:20 90 站立会议 会议 2016.4.5 13:00 13:15 15 摇一摇1 编码测试 2016.4.5 13:35 14:20 45 站立会议 会议 2016.4.6 13:05 13:15 10 数据库函数添加 编码测试 2016.4

解题报告——2018级2016第二学期第五周作业排座椅

解题报告--2018级2016第二学期第五周作业 F:排座椅 描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来 之后,只有有限的D对同学上课时会交头接耳.同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设 置了K条横向的通道,L条纵向的通道.于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅

解题报告—— 2018级2016第二学期第五周作业 删数问题

解题报告--  2018级2016第二学期第五周作业 删数问题 描述 键盘输入一个高精度的正整数n(<=240位),去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小. 输入ns输出最后剩下的最小数样例输入 178543 4 样例输出 13 分析: 这题题目上已表明是贪心算法:原本最容易产生的错误贪心准则是删去其中最大的数字:但通过简单举例便可得之,这种贪心准则要漏洞:通过简单的计算举例发现如果这个数是一位比一位大的话

软件过程与项目管理(第五周作业)

协作图(第五周项目所分配的任务) 一.协作图的作用 协作图是在一种给定语境中描述协作中各个对象间的组织交互关系的空间组织结构的图形化方式,从定义中可以分析它的作用为:对象间消息的传递来反映具体的使用语境的逻辑表达,一个使用情境的逻辑可能是一个用例的一部分或是一条控制流:它的交互关联显示对象交互的空间组织结构,显示一种对象间的关系,而不注重顺序:表现一个类的操作实现,协作图中可以说明类操作中使用的参数,变量,返回值.当表现一个系统的行为时,消息编号对应了程序中嵌套调用的结构和信号传递过程. 序列图

第四、五周学习进度表

    周数     专业学习目标 专业学习时间 博客发表量 人文方面的学习 知识技能总结     第四周          HTML5       5h       1 阅读HTML5应用 开发与实践   基础差,概念模糊  第五周   数据结构       5h       2 阅读<疯狂的程序员>   上机实践很重要

软件工程_东师站_第五周作业

1.psp Date Type Job Start Int(min) End Total(min) 20160404 助教 团队博客 14:00 16:20 25 14:25 18:00 100 站立会议 "耐撕"站立会议 15:10 15:40 30 编码 重构 18:00 5 18:30 25 编码 选择抢答者(JSP) 18:30 10 19:30 50 20160405 编码 选择抢答者(生成抢答者圈圈) 18:10 15 19:00 35 看书 计算机网络与因特网 22:00

第五周作业。

第五周时候解决的问题. 就拿自己做的那个APP项目来说吧.由于项目需求,清明前花了一个下午时间来实现一个下拉刷新的ListView.上网看了第三方的库,发现不是很适合自己用.于是自己尝试的去实现了个一个下拉刷新的ListVIew. 项目地址: https://github.com/wukunguang/GongGong 首先,大概描述下用户使用整个下拉刷新的过程. 触摸-> 按住 -> 向下拖动 -> 松开 那么程序内部实现的操作大概可分解为: 捕获触摸动作  -> 捕获向下拖动