蓝桥杯---整数拼接

整数拼接

问题描述
给定义个长度为 n 的数组 A1, A2, · · · , An。你可以从中选出两个数 Ai 和 Aj (i 不等于 j),然后将 Ai 和 Aj 一前一后拼成一个新的整数。例如 12 和 345 可以拼成 12345 或 34512。注意交换 Ai 和 Aj 的顺序总是被视为 2 种拼法,即便是 Ai = Aj 时。请你计算有多少种拼法满足拼出的整数是 K 的倍数。

输入格式
第一行包含 2 个整数 n 和 K。
第二行包含 n 个整数 A1, A2, · · · , An。

输出格式
一个整数代表答案。

样例输入

4 2
1 2 3 4

样例输出

6

评测用例规模与约定 对于 30% 的评测用例,1 ≤ n ≤ 1000, 1 ≤ K ≤ 20, 1 ≤ Ai ≤ 104。
对于所有评测用例,1 ≤ n ≤ 105,1 ≤ K ≤ 105,1 ≤ Ai ≤ 109。

code:(蛮力,30%)
//对于 30% 的评测用例,可以直接用暴力循环

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int len(int a){
    
    
	int len=0;
	while(a){
    
    
		len++;
		a/=10;
	}
	return len;
}

int isok(int a,int b,int k){
    
    
	int len_b=len(b);
	int sum=a*pow(10,len_b)+b;
	if(sum%k==0){
    
    
		return 1;
	}else{
    
    
		return 0;
	}
}

int main()
{
    
    
	int n,k;
	scanf("%d %d",&n,&k);
	
	int a[n];
	for(int i=0;i<n;i++){
    
    
		scanf("%d",&a[i]);
	}	
	int ans=0;
	
	for(int i=0;i<n-1;i++){
    
    
		for(int j=i+1;j<n;j++){
    
    
			if(isok(a[i],a[j],k)==1){
    
    
				ans++;
			}
			if(isok(a[j],a[i],k)==1){
    
    
				ans++;
			}
		}
	}
	printf("%d",ans);
	return 0;
} 

code2:

//...

猜你喜欢

转载自blog.csdn.net/timelessx_x/article/details/115013211