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<stdio.h>
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(<N),输出扫描完第K遍后的中间结果数列。

输入格式:

输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。

输出格式:

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

输入样例:

6 2
2 3 5 1 6 4

输出样例:

2 1 3 4 5 6

#include<stdio.h>
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!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您解答有关 PTA 作业 7 函数的问题。 PTA 作业 7 中,主要涉及到函数的定义、调用和使用。下面是一些常见的函数问题: 1. 如何定义函数? 函数定义的一般形式为: ``` 返回值类型 函数名(参数列表) { 函数体 } ``` 其中,返回值类型可以是任意类型,函数名是用户自己定义的函数名,参数列表是函数的输入参数,可以有多个参数,也可以没有参数。函数体是函数的具体实现,包括一系列的语句和逻辑。 例如,定义一个求两个整数之和的函数: ``` int add(int a, int b) { return a + b; } ``` 2. 如何调用函数? 函数调用的一般形式为: ``` 函数名(参数列表); ``` 其中,函数名是需要调用的函数名,参数列表是函数的输入参数,需要按照函数定义的顺序传入。 例如,调用上面定义的 add 函数: ``` int result = add(3, 4); ``` 3. 如何使用函数? 函数的使用主要包括两个方面:函数的调用和函数的返回值的使用。 函数的调用已经在上面介绍过了,在这里重点讲解函数的返回值的使用。 如果函数有返回值,可以将函数调用的返回值赋值给一个变量,然后在程序中使用这个变量。 例如,使用上面定义的 add 函数: ``` int a = 3; int b = 4; int result = add(a, b); printf("%d + %d = %d\n", a, b, result); ``` 这样,程序就会输出:3 + 4 = 7。 希望这些信息对您有所帮助。如果您有任何其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值