zoukankan      html  css  js  c++  java
  • 2019年春季学期第四周作业

    7-1 冒泡法排序 (10 分)
    输入1个正整数n(1<=n<=10),然后输入n个整数并存放在数组中,将这n个整数从大到小排序后输出,相邻数字间有一个空格,行末不得有多余空格。

    输入格式:

    输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

    输出格式:

    在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

    输入样例:

    4
    75 71 77 76
    输出样例:

    77 76 75 71

    1).实验代码

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

    2) 设计思路
    按书上步骤,把符号改一下就可以了。
    先自定义一个函数bubble,在里面运算,如果数组里后一个数字比前一个大就交换两个数字位置,然后一个循环就可以了。

    3).本题调试过程碰到问题及解决办法
    编译器能通过,pta通不过,经过助教帮助发现要先输出一个数a[0],在输出后面的。

    4).运行结果截图

    7-2 选择法排序 (20 分)
    本题要求将给定的n个整数从大到小排序后输出。

    输入格式:

    输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

    输出格式:

    在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

    输入样例:

    4
    5 1 7 6
    输出样例:

    7 6 5 1

    1).实验代码

    #include<stdio.h>
    int main()
    {
        int i,index,k,n,temp;
        int a[10];
        scanf ("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
    
        }
        for(k=0;k<n-1;k++)
        {
            index =k;
            for(i=k+1;i<n;i++)
            {
                if(a[i]>a[index]) index=i;
            }
            temp=a[index];
            a[index]=a[k];
            a[k]=temp;
        }
       printf("%d",a[0]);
    
        for(i=1;i<n;i++)
            printf(" %d",a[i]);
    
        return 0;
    }
    

    2) 设计思路

    和书上一样,就是要先输出a[0]。

    3).本题调试过程碰到问题及解决办法
    没什么大问题,就空格和i=1哪里注意一下

    4).运行结果截图

    7-1 找鞍点 (20 分)
    一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

    本题要求编写程序,求一个给定的n阶方阵的鞍点。

    输入格式:

    输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

    输出格式:

    输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

    输入样例1:

    4
    1 7 4 1
    4 8 3 6
    1 6 1 2
    0 7 8 9
    输出样例1:

    2 1
    输入样例2:

    2
    1 7
    4 1
    输出样例2:

    NONE

    1).实验代码

    
    #include<stdio.h>
    int main()
    {
    	int n, i, j, min, max, temp,flag=0;
    	int a[n][n], index[n];
    	
    	scanf("%d",&n);
    	
    	for(i=0; i<n; i++)
    	    for(j=0; j<n; j++)
                {
                    
    		        scanf("%d",&a[i][j]);
            
    		        if(j==0) max=a[i][j];
    		        
    		        if(max<=a[i][j])
                        {
                            
                            max=a[i][j];
    		                index[i]=j;
    	        }
    	    }
    	}
    	for(j=0; j<n; j++){
    	    for(i=0; i<n; i++)
                {
                    
    		        if(i==0) min=a[i][j];
            
    		        if(min>=a[i][j])
    		        {
    		            
    		            min=a[i][j];
    		            temp=i;
    		}
    	    }
    	   if(j==index[temp])
            {
    	      printf("%d %d", temp ,j);
    	      flag=1;
    	      break;
    	   }
          }
         if(flag==0)printf("NONE");
    
    
         return 0;
    }
    
    

    2) 设计思路

    要用嵌套循环,找到最大的数字。
    每一行的头一个数字设置为max,找到每行最大的数字,记录下标。
    然后找到列最小的数字,并记录下标。
    根据列最小的行角标i,判断它们的纵角标j是否相等
    比较下标,如果相同则输出temp和j。如果不相同则没有。

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

    不能写max<a,必须要洗<=.
    我不知道为什么要把index设置为数组

    4).运行结果截图

  • 相关阅读:
    HDU 3081 Marriage Match II
    HDU 4292 Food
    HDU 4322 Candy
    HDU 4183 Pahom on Water
    POJ 1966 Cable TV Network
    HDU 3605 Escape
    HDU 3338 Kakuro Extension
    HDU 3572 Task Schedule
    HDU 3998 Sequence
    Burning Midnight Oil
  • 原文地址:https://www.cnblogs.com/hy14157/p/10572180.html
Copyright © 2011-2022 走看看