• SDUT 1704 统计数字问题


    在论坛看到一个新生问这个题了,转化成字符串然后枚举肯定会超时。

    1704

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1704

    View Code
     1 #include<stdio.h>
     2 #define N 10
     3 int d[N];
     4 int value;
     5 void deal (int n)
     6 {
     7     if(n<=0) return;
     8     int one,ten,i;// one分别代表个位和十位
     9     one=n%10;
    10     n/=10;
    11     ten=n;
    12     for(i=0;i<=one;i++)//计算个位上出现的次数
    13     {
    14         d[i]+=value;
    15     }
    16     while(ten)//计算例如197中 除去个位 十位上9和1出现的次数
    17     {
    18         d[ten%10]+=(one+1)*value;
    19         ten/=10;
    20     }
    21     for(i=0;i<10;i++)//计算 例如197 190以下的出现的次数。
    22     {
    23         d[i]+=n*value;
    24     }
    25     d[0]-=value;
    26     value*=10; //权值乘以10
    27     deal(n-1);//递归运算 此时n已经改变
    28 }
    29 int main()
    30 {
    31     int a,i;
    32     scanf("%d",&a);
    33     for(i=0;i<10;i++)
    34     {
    35         d[i]=0;
    36     }
    37     value=1;
    38     deal(a);
    39     for(i=0;i<10;i++)
    40     {
    41         printf("%d\n",d[i]);
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    名字匹配(水题)
    奇怪的键盘
    杰杰的键盘
    Windows Message Queue(优先队列)
    筛法求素数
    会场安排问题(贪心)
    Sail
    Elevator
    Lowest Bit
    File Searching
  • 原文地址:https://www.cnblogs.com/timeship/p/2726592.html
Copyright © 2020-2023  润新知