按递增的顺序实现10个整数的冒泡排序,统计0-9每个数字连续出现的最多的次数

157 阅读2分钟

第一题:

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.心得:

大的问题要化解成一个个小问题,然后想到小问题的解决方法后,逐渐解决大问题。储存次数不一定要用一个数组。