鱼C论坛

 找回密码
 立即注册
查看: 1908|回复: 4

题目684:颠倒数位和

[复制链接]
发表于 2020-4-24 09:45:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 永恒的蓝色梦想 于 2020-4-24 09:52 编辑

这个标题难搞哦……

                               
登录/注册后可看大图


                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-24 10:36:02 | 显示全部楼层
woc......
一个初中学历的学生表示不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 23:09:28 | 显示全部楼层
本帖最后由 代号-K 于 2020-4-24 23:12 编辑

i = 10时 结果:8042614
提供个思路,可以用python 跑一下
  1. void getInverseDigitSum(int start, int stop, int *sum){
  2.     int i = start+1;
  3.     int temp1, temp2;
  4.     while(i <= stop){
  5.         temp1 = (i+1) % 9;
  6.         temp2 = (i+1) / 9;
  7.         if(temp1 == 0){
  8.             *sum += 9*(int)pow(10,temp2-1)-1;
  9.         }else{
  10.             *sum += temp1*(int)pow(10,temp2)-1;
  11.         }
  12.         i++;
  13.     }
  14. }

  15. void getFibonacci(int flag, int *array){
  16.    int a = 0;
  17.    int b = 1;
  18.    int c;
  19.    int i = 2;
  20.    array[0] = 0;
  21.    array[1] = 1;
  22.    while(i < flag){
  23.        c = a;
  24.        a = b;
  25.        b = c + a;
  26.        array[i++] = b;
  27.    }
  28. }

  29. int main(int argc, char *argv[]){
  30.     int answer = 1;
  31.     int sum = 1;
  32.     int array[100] = {0};
  33.     getFibonacci(21, array);
  34.     for(int i = 2; i < 10; i++){
  35.         getInverseDigitSum(array[i],array[i+1],&answer);
  36.         sum += answer;
  37.         printf("%d\n",sum);
  38.     }
  39.     return 0;
  40. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 06:33:13 | 显示全部楼层
代号-K 发表于 2020-4-24 23:09
i = 10时 结果:8042614
提供个思路,可以用python 跑一下

大佬牛皮
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:25:15 | 显示全部楼层
本帖最后由 guosl 于 2021-11-28 10:27 编辑

令k=n/9,r=n%9,则s(n)=r*10^k+9..(k个9)...9。应用这个思路加上9..(k个9)...9=10^k - 1 以及等比级数求和与快速幂的综合可以计算出最终结果:922058210,耗时不到1秒。
  1. //答案:922058210
  2. #include <iostream>
  3. using namespace std;

  4. const long long MOD = 1000000007ll;

  5. long long f[100];

  6. long long qpow(long long k)
  7. {
  8.   if (k == 0)
  9.     return 1LL;
  10.   else if (k == 1)
  11.     return 10LL;
  12.   long long t = 0;
  13.   if ((k & 1) == 0)
  14.   {
  15.     t = qpow(k >> 1);
  16.     t = t*t;
  17.   }
  18.   else
  19.   {
  20.     t = qpow(k - 1);
  21.     t *= 10LL;

  22.   }
  23.   t %= MOD;
  24.   return t;
  25. }

  26. int main(void)
  27. {
  28.   f[0] = 0;
  29.   f[1] = 1;
  30.   for (int i = 2; i < 100; ++i)
  31.     f[i] = f[i - 1] + f[i - 2];
  32.   long long lTS = 1, nS = 1;
  33.   for (int i = 3; i <= 16; ++i)
  34.   {
  35.     long long tS = 0, t = 0;
  36.     for (int j = int(f[i - 1]) + 1; j <= int(f[i]); ++j)
  37.     {
  38.       int k = int(j / 9), r = int(j % 9);
  39.       t = qpow(k);
  40.       t *= (r + 1);
  41.       --t;
  42.       tS += t;
  43.     }
  44.     nS += tS;
  45.     lTS += nS;
  46.   }
  47.   lTS %= MOD;
  48.   for (int i = 17; i <= 90; ++i)
  49.   {
  50.     long long k1 = (f[i - 1] + 1) / 9;
  51.     long long k2 = f[i] / 9;
  52.     int r = int((f[i - 1] + 1) % 9);
  53.     long long tS = 0, t = 0;
  54.     for (int r1 = r; r1 < 9; ++r1)
  55.     {
  56.       t = qpow(k1);
  57.       t *= (r1 + 1);
  58.       --t;
  59.       if (t < 0)
  60.         t += MOD;
  61.       t %= MOD;
  62.       tS += t;
  63.       tS %= MOD;
  64.     }
  65.     ++k1;
  66.     if (k2 > k1)
  67.     {
  68.       t = qpow(k2 - k1);
  69.       --t;
  70.       if (t < 0)
  71.         t += MOD;
  72.       long long t1 = qpow(k1);
  73.       t *= t1;
  74.       t %= MOD;
  75.       t *= 5;
  76.       t -= 9 * (k2 - k1);
  77.       if (t < 0)
  78.         t += MOD;
  79.       t %= MOD;
  80.       tS += t;
  81.       tS %= MOD;
  82.     }
  83.     r = int((f[i]) % 9);
  84.     for (int r1 = 0; r1 <= r; ++r1)
  85.     {
  86.       t = qpow(k2);
  87.       t *= (r1 + 1);
  88.       --t;
  89.       if (t < 0)
  90.         t += MOD;
  91.       t %= MOD;
  92.       tS += t;
  93.       tS %= MOD;
  94.     }
  95.     nS += tS;
  96.     nS %= MOD;
  97.     lTS += nS;
  98.     lTS %= MOD;
  99.   }
  100.   cout << lTS << endl;
  101.   return 0;
  102. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 14:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表