试题 I: 整数拼接
时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分
【问题描述】
给定义个长度为 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。
【输出格式】
一个整数代表答案。
【评测用例规模与约定】
对于 30% 的评测用例,1≤n≤1000,1≤K≤20,1≤Ai≤104。
对于所有评测用例,1≤n≤105,1≤K≤105,1≤Ai≤109。
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
string s[10005];
int n,k;
int ans=0;
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>s[i];
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j)continue;
string str=s[i]+s[j];// 拼接字符串
stringstream ss;//将string类型转换成int
int temp;
ss<<str;//字符串插入到流中去
ss>>temp;//从流中取出给temp
if(temp%k==0){
ans++;
cout<<temp<<" ";
}
}
}
cout<<"\n"<<ans<<endl;
return 0;
}