第一题:
1.题目:
按递增的顺序实现10个整数的冒泡排序。 例如: 输入:2 94 5 68 523 44 86 100 123 999 输出:2 5 44 68 86 94 100 123 523 999
2.解题思路
比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
3.代码实现
#include<iostream>
using namespace std;
int main()
{
int b,a[10],i,j;
for(i=0;i<10;i++)
{
cin>>a[i];
}
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
{
if(a[i]>a[i+1])
{
b=a[i+1];
a[i+1]=a[i];
a[i]=b;
}
}
for(i=0;i<10;i++)
{
cout<<a[i]<<" ";
}
}
4.困难及解决
困难:内外层循环的次数是多少 解决:通过复习上学期排序方法和记特殊例子的方法确定了
5.心得
基本的排序方法应该熟练掌握
第二题:
1:问题
输入一组个位数,根据输入统计0-9每个数字连续出现的最多的次数,输入-1表示结束。 例如: 输入:3 3 3 5 5 3 9 -1 输出:3 occurs 3 times 5 occurs 2 times 9 occurs 1 times
2:解题思路
用数组储存录入的全部数据,用判断语句决定什么时候停止输入,用b[10]来表示某一段重复出现数字的次数,用temp[10]来储存连续重复的最多次数。
3.代码实现
#include<iostream>
using namespace std;
int main()
{
int i,a[100],b[10]={0},temp[10]={0};
for(i=0;;i++)
{
cin>>a[i];
if(a[i]==-1)
break;
}
switch(a[0])
{
case 0:b[0]++;temp[0]++;break;//case0-9
}
for(i=1;a[i]!=-1;i++)
{
switch(a[i])
{
case 0:if(a[i-1]==0) b[0]++;
else b[0]=1;
if(temp[0]<b[0]) temp[0]=b[0];
break;
}
}
for(i=0;i<10;i++)
{
if(temp[i]!=0)
cout<<i<<" occurs "<<temp[i]<<" times"<<endl;
}
}
4.问题及解决方法
问题:如何确认一个数连续出现,且记录其次数。 解决:判断它是否等于前一个数,如果是,给对应储存它次数的数组加一 问题:如何判断它是所有重复中重复次数最多的一次 解决:用俩个数组存储它的重复次数,一个储存重复最多的次数,一个储存它当前重复的次数,然后每次进行比较,将大的放在其储存次数最多的数组中
5.心得:
大的问题要化解成一个个小问题,然后想到小问题的解决方法后,逐渐解决大问题。储存次数不一定要用一个数组。