PTA作业(1)

PTA练习之数组

题目:

第一题:给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入格式:

输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。

输出格式:

在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

输入样例:

3
1234 2345 3456

输出样例:

3: 3 4

#include
int main()
{
     
	int a[10]={
     0};
	int n,i,m,c,max=0;
	int cnt=0;
	int mnt=0;
	scanf("%d",&n);
	while(n--){
     
		scanf("%d",&m);
		if(m==0)
		a[0]++;
		while(m>0){
     
		c=m%10;
		m=m/10;
		a[c]++;	
		}
	} 
	for(i=0;i<10;i++){
     
		if(a[i]>max)
		max=a[i];
	}
	printf("%d:",max);
	for(i=0;i<10;i++){
     
        if(a[i]==max)
     printf(" %d",i);
			
	} 
	return 0;
 }

思路:拿到这个题,他让你寻找出现次数最多的个位数字,而你输入的是很多四位数字,那么你肯定需要将这些四位数字转变为一个一个数字储存在数组里,对这四位数字取3次余就可以得到各个位上的数字,而这些数字只会在0到9中出现,所以只用定义一个a[10]的数组,出现那个数字,便给a[几]加1,这样处理完所有数字后,便可以比较,a[几]对应的数字最大,谁就是出现次数最多的。

难点:这个题的难点其实就在于想不到将每个数字转化为数组的元素并存入数组中去,别的都挺好想,但是如果一开始没有想到,就像我,半天不知道该怎么下手。

反思:还是应该多刷刷题,把思维打开打开。

第二题:将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。

本题要求对任意给定的K(

输入格式:

输入在第1行中给出N和K(1≤K

输出格式:

在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

输入样例:

6 2
2 3 5 1 6 4

输出样例:

2 1 3 4 5 6

#include
int main()
{
     
    int n,k,i,t,j,num;
    scanf("%d %d",&n,&k);
    int a[n];
    for(i=0;i<n;i++)
    {
     
        scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)
    {
        num++;
        for(j=0;j<n-i-1;j++)
        {
     
            if(a[j]>a[j+1])
            {
     
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
        if(num==k)
        {
     
            break;
        }
    }
    for(i=0;i<n;i++)
    {
     
        printf("%d",a[i]);
        if(i<n-1)
        {
     
            printf(" ");
        }
    }
    
}

思路:这个题其实并不难,只是我没有想到出题还可以这样出,他就是一个简单的冒泡排序,只是不光考察冒泡排序的代码,还考察了冒泡排序的细节,只有你清楚他是怎么一步一步交换的,才可以做出这个题。

反思:在学以后的知识当中,不应该仅仅在掌握代码怎么敲,而更应注意的是他的思想。fighting!

你可能感兴趣的:(c语言)