7-5 数组元素循环右移问题 (20分)-016

无人久伴 提交于 2020-08-09 12:28:15
7-5  数组元素循环右移问题  (20分)
 

一个数组A中存有N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M0)个位置,即将A中的数据由(A0A1AN1)变换为(ANMAN1A0A1ANM1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:

每个输入包含一个测试用例,第1行输入N1N100)和M0);第2行输入N个整数,之间用空格分隔。

输出格式:

在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例:

6 2
1 2 3 4 5 6

输出样例:

5 6 1 2 3 4

 

#include <stdio.h>
 
int main()
{
	/*基本变量的确定*/
	int n,m;
	scanf("%d %d",&n,&m);
	
	if(n<=100&&n>=1){    
	
		/*数据输入存储*/  
		int temp[n];
		for(int i=0;i<n;i++){	 //此处并非遍历,而是从i=0,开始直到n-1 
			m=m%n;		//从m开始++,以n为周期,数据输入 
			scanf("%d",&temp[m]);
			m++;
		}
		
		/*遍历数据输出*/
		int count=1;	//标准化的空格输出小技巧 
		for(int i=0;i<n;i++){
			printf("%d",temp[i]);
			if(count<n){ 
				printf(" ");
				count++;
			} 
		}
	} 
}

上下两题,实现路径雷同: 标准化空格小技巧,真的值得以后经常使用,哈哈!

7-6  求最大值及其下标  (20分)
 

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。

输入格式:

输入在第一行中给出一个正整数n1<n10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

输入样例:

6
2 8 10 1 9 10

输出样例:

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

上下两题,实现路径雷同:  

7-7  将数组中的数逆序存放  (20分)
 

本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。

输入格式:

输入在第一行中给出一个正整数n1n10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。

输入样例:

4
10 8 1 2

输出样例:

2 1 8 10
#include <stdio.h>
 
int main()
{
	int n;
	scanf("%d",&n);
	int temp[n];
	for (int i=0;i<n;++i)
	{
		scanf("%d",&temp[i]);
	}
	int count=1;
	for (int i=n-1;i>=0;--i)
	{
		printf("%d",temp[i]);
		if(count<n)
		{
			printf(" ");
			count++;
		}
	}
}
7-8  矩阵运算  (20分)
 

给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。

输入格式:

输入第一行给出正整数n1<n10);随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。

输入样例:

4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1

输出样例:

35

 #include <stdio.h>
 
int main()
{

/*准备工作*/
    int n,sum=0;
    scanf("%d",&n);
    int matrix[n][n];

/*数据输入*/
    for (int i=0;i<n;++i)
    {
        for (int j=0;j<n;++j)
        {
            scanf("%d",&matrix[i][j]);
            //if((i+j)!=(n-1) && i!=3 && j!=3)    //错误点:对&& 、||、!的使用,不熟练
            if(!(i+j==n-1||i==n-1||j==n-1))
            {
                sum+=matrix[i][j];
            }
        }
     } 
     
    printf("%d",sum);
    return 0;
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!