数组-子数整除

时间:2022-09-03 10:27:40

【题】

子数整除(选作)


对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:

  • sub1=a1a2a3
  • sub2=a2a3a4
  • sub3=a3a4a5

例如,五位数20207可以拆分成:

  • sub1=202
  • sub2=020(=20)
  • sub3=207

现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1、sub2、sub3都可被K整除。

输出时请按照由小到大的顺序排列(每行输出一个数)。

  测试输入数组-子数整除 期待的输出数组-子数整除 时间限制数组-子数整除 内存限制数组-子数整除 额外进程数组-子数整除
测试用例 1 以文本方式显示
  1. 15↵
以文本方式显示
  1. 22555↵
  2. 25555↵
  3. 28555↵
  4. 30000↵
1秒 64M 0
【分析】
            这题没什么可说的,很简单。。。这题涉及到数组无非是需要求子数,但求子数并不需要数组,用除法和取模就可以实现了。

【代码】
              (1)先不用数组,用除法和取模实现。

#include "stdio.h"

int main(int argc, char **argv)
{
	int i, k;

	scanf("%d", &k);
	getchar();

	int x, y, z;

	for (i = 10000; i <= 30000; i++)
	{
		x = i / 100;
		y = i % 10000 / 10;
		z = i % 1000;
		if (x % k == 0 && y % k ==0 && z % k == 0)
		{
			printf("%d\n", i);
		}
	}
	return 0;
}

         (2)数组,先求出i的每一位,然后得到三个子数。

#include "stdio.h"
#include "math.h"

int main(int argc, char **argv)
{
	int i, j, k;

	int temp, arr[5];		//保存数的各个位

	scanf("%d", &k);
	getchar();

	int x, y, z;

	for (i = 10000; i <= 30000; i++)
	{
		for (j = 0; j < 5; j++)      //数组初始化
			arr[j] = 0;
		
		temp = i;
		j = 4;						 // 
		
		while(temp)                  //从最高位开始,把每一位分别存入数组
		{
			arr[j] = temp / (int)pow(10, j);    			
			temp %= (int)pow(10, j);
			j--;
		}
		
		x = arr[4] * 100 + arr[3] * 10 + arr[2];   //组合成三个子数
		y = arr[3] * 100 + arr[2] * 10 + arr[1];
		z = arr[2] * 100 + arr[1] * 10 + arr[0];
			
		if (x % k == 0 && y % k ==0 && z % k == 0)
		{
			printf("%d\n", i);
		}
	}
	return 0;
}