HDU 5373 The shortest problem

本文介绍了一个通过不断迭代初始数字与当前迭代步数的和来判断最终结果是否为11的倍数的算法。该算法利用了11倍数的特性,即奇数位和偶数位数字之差能被11整除。通过C语言实现,包括读取输入、处理数字和判断条件等步骤。

分析:题目问最后得到的数能不能被11整除,11的倍数的特点是奇数位和偶数位的差能被11整除,知道这就好求了。

# include <stdio.h>
# include <string.h>
  char s[10];
  int main()
  {
      int i,n,t,len,cas=1,sum,tem,k,s1,s2,x1,x2;
      while(scanf("%d%d",&n,&t))
      {
          if(n==-1&&t==-1)
            break;
          sprintf(s,"%d",n);
          len=strlen(s);
          s1=s2=0;
          for(i=sum=0;i<len;i++)
          {
              sum+=s[i]-'0';
              if(i%2==0)
                s1+=s[i]-'0';
              else
                s2+=s[i]-'0';
          }
          while(t--)
          {
              tem=sum;
              k=x1=x2=0;
              while(tem)
              {
                  if(k%2==0)
                    x1+=tem%10;
                  else
                    x2+=tem%10;
                  sum+=tem%10;
                  tem/=10;
                  k++;
              }
              if(len%2==0)
              {
                  if(k%2==1)
                    s1+=x1,s2+=x2;
                  else
                    s1+=x2,s2+=x1;
              }
              else
              {
                  if(k%2==1)
                    s1+=x2,s2+=x1;
                  else
                    s1+=x1,s2+=x2;
              }
              len+=k;
          }
          printf("Case #%d: ",cas++);
          if((s1-s2)%11==0)
            printf("Yes\n");
          else
            printf("No\n");
      }
      return 0;
  }


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值