蓝桥杯-整数拼接

原题:蓝桥杯2020年第十一届省赛真题-整数拼接 - C语言网
#include<bits/stdc++.h>
using namespace std;

long long int getweishu(long long int a) {	//获取a是多少位数 
	long long int num = 0;
	while (a / 10 != 0) {
		num++;
		a = a / 10;
	}
	num++;
	return num;
}

int main() {
	int begin1 = 1, begin2 = 1;
	long long int n, K;
	long long int num = 0, one = 0, allone = 0;
	cin >> n >> K;

	long long int a[10000] = {}, c[10000] = {}, d[10000] = {};
	int i, j, temp;

	for (i = 1; i <= n; i++) {
		cin >> a[i];
	}

	for (i = 1; i <= n; i++) {	//初始化a[i]是否可以被K整除
		if (a[i] % K == 0) {
			//将可被整除的数放进d中,begin2为c中数的个数 
			d[begin2++] = a[i];
			one++;
		}
		else {
			//将不可被整除的数放进c中,begin1为c中数的个数 
			c[begin1++] = a[i];
		}
	}

	for (i = one - 1; i >= 1; i--) {		//可被整除的数之间相互组合的种数
		allone += i;
	}
	allone = 2 * allone;	//所有可被除的组合起来的种数

	long long int zhishu = 0;
	for (i = 1; i < begin1; i++) {	//c不可整除 
		for (j = 1; j < begin2; j++) {	//d可整除 
			zhishu = getweishu(d[j]);
			long long int x = c[i] * pow(10, zhishu);
			//不可整除的数后面连接上可整除的数,然后判断是否可被整除
			if ((x + d[j]) % K == 0) {		
				num++;
			}
		}
	}
	
	int zhishu1,zhishu2;
	long long int temp1,temp2;
	for(i=1;i<begin1;i++){
		for(j=i+1;j<=begin1;j++){
			zhishu1=getweishu(c[i]);
			zhishu2=getweishu(c[j]);
			temp1=c[i]*pow(10,zhishu2)+c[j];
			temp2=c[i]+c[j]*pow(10,zhishu1);
			if(temp1%K==0){
				num++;
			}
			if(temp2%K==0){
				num++;
			}
		}
	}
	
	
	

	num += allone;
	cout << num;

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值