遍历所有字符串若存在相同字符串或前缀相同且长度短的跳过,反之减去它。
#include<bits/stdc++.h> using namespace std; char a[100][100]={0};//前n后m int n,m; int main(){ cin >> n >> m; long long s=pow(10,n); long long p; for(int i=0;i<m;i++) cin >> a[i]; for(int i=0;i<m;i++){ p=1; int a1=1; char b[100]={0}; for(int j=0;j<strlen(a[i])-1;j++){//寻找是否存在前缀相同长度短的串 b[j]=a[i][j]; for(int k=0;k<m;k++){ if (i!=k&&(strcmp(b,a[k])==0)){ a1=0; break; } } } for(int j=i+1;j<m;j++) if(strcmp(a[i],a[j])==0){//寻找是否存在相同串 a1=0; break; } if(a1){ for(int k=1;k<=(n-strlen(a[i]));k++) { p=p*10; } s=s-p; } } cout << s; return 0; }