番外篇之打印图形,矩阵转置,逆序输出,有序序列合并。

前言:
1 第一个问题的主要内容是对循环知识的一个复习,其次是希望大家能够掌握打印图形的规律。

2 后面三个问题主要跟二元数组有关,有一定的方法技巧,大家慢慢看详解,应该会明白。

下面请看题:

//根据规律做题,不知道大家发现没有,先看正对角线,发现行列相等,副对角线行加列等于4
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//打印图形X
int main()
{
	int i = 0;//行
	int j = 0;//列
	int n = 0;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			if (i == j || (i + j) == n - 1)
			{
				printf("*");
			}
			else
				printf(" ");
		}
		printf("\n");
	}
	return 0;
}

看看运行结果:

下面看代码:

//还是找规律
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//打印图形X
int main()
{
	int i = 0;//行
	int j = 0;//列
	int n = 0;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			if (i==0||j==0||j==n-1||i==n-1)//这个是规律的核心
			{
				printf("* ");
			}
			else
				printf("  ");
		}
		printf("\n");
	}
	return 0;
}

2 矩阵转置

int main()
{
	int n = 0;//行
	int m = 0;//列
	scanf("%d%d", &n, &m);
	int i = 0;
	int j = 0;
	int arr[10][10] = { 0 };
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		scanf("%d", &arr[i][j]);
	}
	for (i = 0; i< m; i++)
	{
		for (j = 0; j < n; j++)
		{
			printf("%d ",arr[j][i]);
		}
		printf("\n");
	}

	return 0;
}

3 逆序输出

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 9; i >= 0; i--)
	printf("%d ", arr[i]);
	return 0;
}

3 交换数组

#include <stdio.h>
int main()
{
	int arr1[10] = {0};
	int arr2[10] = {0};
	int i = 0;


	printf("请输入10个数字:>");
	for(i=0; i<10; i++)
	{
		scanf("%d", &arr1[i]);
	}
	printf("请输入10个数字:>");
	for(i=0; i<10; i++)
	{
		scanf("%d", &arr2[i]);
	}
	//交换
	for(i=0; i<10; i++)
	{
		int tmp = arr1[i];
		arr1[i] = arr2[i];
		arr2[i] = tmp;
	}
	
	return 0;
}

4 有序序列合并

法一:冒泡排序(这里不建议用,虽然能做出来,但是这有点像套用公式的做法,有点古板,个人感觉)

#include <stdio.h>
int main()
{
    int n = 0;
    int m = 0;
    scanf("%d%d", &n, &m);
    int i = 0;
    int j = 0;
    int arr[10000] = { 0 };
    for (; i < n+m; i++)
    {
        scanf("%d", &j);
        arr[i] = j;
    }
    for (i = 0; i < n + m; i++)
    {
        for (j = 0; j < n + m -1 - i; j++)
        {
            if (arr[j] > arr[j+ 1])
            {
                int tmp = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    for (i = 0; i < n + m; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

法二(比较难想,不失为一种好方法,应该少数人能想到):

#include <stdio.h>


int main()
{
    int n = 0;
    int m = 0;
    int arr1[1000] = {0};
    int arr2[1000] = {0};
    //输入
    scanf("%d %d", &n, &m);
    int i = 0;
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr1[i]);
    }
    for(i=0; i<m; i++)
    {
        scanf("%d", &arr2[i]);
    }
    //处理
    int j = 0;
    i = 0;
    while(i<n && j<m)
    {
        if(arr1[i] < arr2[j])
        {
            printf("%d ", arr1[i]);
            i++;
        }
        else
        {
            printf("%d ", arr2[j]);    
            j++;
        }
    }
    if(i == n)
    {
        for(; j<m; j++)
        {
            printf("%d ", arr2[j]);
        }
    }
    else
    {
        for(; i<n; i++)
        {
            printf("%d ", arr1[i]);
        }
    }
    return 0;
}

今天的内容就讲解完毕了,留下了一道比较有意思的题目,大家可以看看,答案附在后面(用到的知识点都是前面学的,不含后面的知识点,到这里我相信大家一定看的懂答案的,这个答案的代码还是有许多优化空间的,大家可以自己试着先做一下,再看答案的思路,最后优化一下答案的代码和自己的代码)

#include<stdio.h>
int main()
{
	int l = 0;
	int r = 0;
	scanf("%d%d", &l, &r);
	int i = 0;
	int x = 1;
	int y = 0;
	int m = 0;
	int count0 = 0;
	int count1 = 0;
	int count2 = 0;
	int count3 = 0;
	int count4 = 0;
	int count5 = 0;
	int count6 = 0;
	int count7 = 0;
	int count8 = 0;
	int count9 = 0;
	int max = 0;
	int n = 0;
	for (i = l; i <= r; i++)
	{
		m = i;
		if (i == 0)
		{
			count0++;
		}
		if (m % 10 == 0&&m!=0)
		{
			count1++;
			count0++;
			while (m /= 10)
			{
				if (m != 1)
				count0++;
			}
		}
		m = i;
		while (m!= 0&&i!=0&&m%10!=0)
		{
			x = m % 10;
			m /= 10;
			switch (x)
			{
			case 0:
				count0++;
				break;
			case 1:
				count1++;
				break;
			case 2:
				count2++;
				break;
			case 3:
				count3++;
				break;
			case 4:
				count4++;
				break;
			case 5:
				count5++;
				break;
			case 6:
				count6++;
				break;
			case 7:
				count7++;
				break;
			case 8:
				count8++;
				break;
			case 9:
				count9++;
				break;
			}
		}
	}
	int arr[10] = { count0, count1, count2, count3, count4, count5, count6, count7, count8, count9 };
	max = arr[0];
	for (y = 0; y <= 9; y++)
	{
		if (max < arr[y])
			max = arr[y];
	}
		if (max == count0)
			n = 0;
		if (max == count1)
			n = 1;
		if (max == count2)
			n = 2;
		if (max == count3)
			n = 3;
		if (max == count4)
			n = 4;
		if (max == count5)
			n = 5;
		if (max == count6)
			n = 6;
		if (max == count7)
			n = 7;
		if (max == count8)
			n = 8;
		if (max == count9)
			n = 9;
		printf("%d %d", n, max);
	    return 0;
}

猜你喜欢

转载自blog.csdn.net/2301_79811170/article/details/134168877