对于一些打印格式特殊的题目讲解

如果说给定一个数组arr【5】={1,2,3,4,5};

要求打印格式为(1 2 3 4 5)要求每个数之间一个空格,末尾没有空格,那么怎么打印呢?

经过思考,我们可以用以下的方法(方法一)

#include <stdio.h>
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		printf("%d", arr[i]);
		if (i < 4)
		{
			printf(" ");
		}
	}
	return 0;
}

又或者这样写(方法二)

#include <stdio.h>

int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int i = 0;
	printf("%d", arr[0]);
	for (i = 1; i < 5; i++)
	{
		printf(" %d", arr[i]);
	}
	return 0;
}

由或者这样写(方法三)

#include <stdio.h>
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int i = 0;
	int flag = 0;
	for (i = 0; i < 5; i++)
	{
		if (flag)
		{
			printf(" ");
		}
		printf("%d", arr[i]);
		flag++;
	}
	return 0;
}

方法的描述很简单,那么我们进入实战练习以下;

先看题目题目要求最后的打印就是要求的格式特殊,就是末尾没有空格;我们先不讨论本题的思路先只考虑打印达到题目要求,代码如下

#include <stdio.h>
int main() 
{
    int a = 0, b = 0; int i = 0;
    while (scanf("%d %d", &a, &b) != EOF)
    {
        int j = 0;
        for (j = a; j <= b; j++)
        {
            int m = 0;
            for (m = 2; m <= j / 2; m++)
            {
                if (j % m == 0)
                {
                    break;
                }
            }
            if (m == j / 2 + 1)
            {
                printf("%d ", j);
            }
        }
        printf("\n");
    }
    return 0;
}

运行出来显然不符合题目要求的格式打印每一行都多一个空格,那么我们就需要利用我们上面的办法进行限制从而达到要求,那么我们选那种方式呢?

本题时循环挨个查看是否为素数,如果是素数,那么就立刻打印出,查找完后,我们无法确定有多少个素数,那么方法一就不可取,方法二其实也是不可取的,这里不多解释,对于方法三我们进行以下约束

只需进行如下改动便可

正确



换行打印也是同理,举个(与方法三一个道理)

题目:

本题要求使用冒泡法排序,将给定的n个整数从小到大排序后输出,并输出排序过程中每一步的中间结果。

冒泡排序的算法步骤描述如下:

第1步:在未排序的n个数(a[0]〜 a[n−1])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,数组中的最大元素“冒泡”到a[n−1];

第2步:在剩下未排序的n−1个数(a[0] 〜 a[n−2])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−2]中的最大元素“冒泡”到a[n−2];

……

第i步:在剩下未排序的n−k个数(a[0]〜a[n−i])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−i]中的最大元素“冒泡”到a[n−i];

……

第n−1步:在剩下未排序的2个数(a[0] 〜a[1])中,比较这两个数,若不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[1]中的最大元素“冒泡”到a[1]。

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

输出格式:
在每一行中输出排序过程中对应步骤的中间结果,即每一步后a[0]〜 a[n−1]的值,相邻数字间有一个空格,行末不得有多余空格。

输入样例:
5
8 7 6 0 1
输出样例:
7 6 0 1 8
6 0 1 7 8
0 1 6 7 8
0 1 6 7 8



代码如下

这个代码也是打印格式特殊

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值