我的思路是打表,但不一次性打出所有。目前已经计算出的最大n标记为max,假如一次输入为n=13,就把n=max+1到13的结果都储存到二维数组中。max初始为0
坑:每行输出末尾不能有空格,但必须换行(包括最后一行输出)
#include <stdio.h> #include <stdlib.h> #include<string.h> #include<ctype.h> int s[10005][12]; int main() { memset(s,0,sizeof(s)); int T,n,max=0; scanf("%d",&T); while(T--){ scanf("%d",&n); if(s[n][0]!=0) { int j; for(j=0;j<=8;j++){ printf("%d ",s[n][j]); } printf("%d",s[n][9]); printf("\n"); } else{ int i; int j; for(i=max+1;i<=n;i++){ for(j=0;j<=9;j++){ s[i][j]=s[i-1][j]; } int k=i; while(k>0) { s[i][k%10]++; k=k/10; } } max=n; for(j=0;j<=8;j++){ printf("%d ",s[n][j]); } printf("%d",s[n][9]); printf("\n"); } } return 0; }