下面是AC代码
#include <bits/stdc++.h>
#define f(i,a,b) for(int i=a;i<=b;i++)
#define g(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int n,k;
int a[11];
int main(){
cin >> n >> k;
int x =pow(10,n)-1;
int y =pow(10,n-1);
f(i,y,x) {
a[i%k]++;
}
f(i,0,k-1) cout << a[i] << " ";
return 0;
}
不过我不想这样写,我想这个可以用数学方法计算的啊,但是就是死活过不了,调了几个小时了,感觉也没啥问题啊,就是2号点wa,也没有数据可以下载,不知道怎么改,求大神指点。
#include <bits/stdc++.h>
#define f(i,a,b) for(int i=a;i<=b;i++)
#define g(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int n,k,x = 1,y = 1;
int a[15];
int main(){
cin >> n >> k;
f(i,1,n) {
x = x*((1 << 3) +(1 << 1));
}
y = x/10;
x--;
//cout << x <<" "<<y;
if((x-y+1)%k == 0) {
f(i,0,k-1) a[i] =(x-y+1)/k;
}else {
int sh,yu;
yu = y%k,sh = y/k;
if(y%k !=0) {
f(i,y%k,k-1) a[i]++;
y =(y/k+1)*k;
}
yu = x%k,sh = x/k;
if(x%k !=0) {
f(i,1,x%k) a[i]++;
x =(x/k)*k;
}
sh = (y-x)/k;
f(i,0,k-1) a[i] += sh;
a[0]++;
}
f(i,0,k-1) cout << a[i] << " ";
return 0;
}