• [解题报告]11743 Credit Check


    题目大意

    题目原文:http://uva.onlinejudge.org/external/117/11743.pdf

    背景:

    今日,用信用卡网络购物已经变得相当普遍,由于用户可能打错信用卡号,所以一般电子商务型网站都会对信用卡号作检查。
    其中一种错误检查机制称为Luhn algorithm,它可以把所有打错一个位数的错误找出来,甚至于能挑出打错多个位数的错误,它的检查规则如下:
    用一个例子来讲解会比较方便,例如信用卡号(5181 2710 9900 0012):
    1. 将偶数字置上的数字乘2,也就是将 ( 5181 2710 9900 0012 )中粗体底线的数字乘2,得到10, 16, 4, 2, 18, 0, 0, 2。
    2. 将刚刚所得到的数字中每一个位数数值加总,即(1+0) + (1+6) + 4 + 2 + (1+8) + 0 + 0 + 2 =25。将信用卡号中奇数字数的数字作加总,即1+1+7+0+9+0+0+2 = 20,再将两数相加25+20=45。
    3. 45的个位数并非0,所以这个信用卡号并不合法。
    本题请你用此法检查信用卡号是否正确
     

    输入

     输入的第一列为整数N,表示测试数据的组数,接下来的N列分别为一个信用卡号,信用卡号有16个数目字,四个数字一组以一个空格符隔开。

    输出

     若信用卡号是检查合格的,请输出"Valid",否则请输出"Invalid"。

     

    Sample Input

    2
    5181 2710 9900 0012
    5181 2710 9900 0017
    

    Sample Output

    Invalid
    Valid
    

    算法:

    好吧,我会吐糟这道题我整整花了三个小时去解决吗,好啃爹的题目啊,一直出错。一开始用gets接收那些所有字符串,后面n的值不懂怎么变了,然后就一直找,找问题就是找不到,后面改用scanf来输入字符,然后又出现问题了,就不能循环了,到后面才知道原来是没有重新赋值,好吧最后还是AC了。我很想知道的是为什么scanf输入后n的值会发生改变。求大神解释。 

    代码:

    这里附上我的代码,你可以去这里提交你的代码验证你的代码是否正确。

    #include<stdio.h>
    int main(void)
    {
        char s[4][5];
        int a[8];
        int n,i,j,k,b,c,sum1,sum2,l;
    
        scanf("%d",&n);
    
        for(i=0;i<8;i++)
        a[i]=0;
    
    
        while(n--)
        {
    
            sum1=sum2=0;
            j=1;k=0;b=0;c=0;
            for(i=0;i<4;i++)
            scanf("%s",s[i]);
    
            for(i=0;i<4;i++)
            {
                for(l=0;l<4;l++)
                {
                    j++;
                    if(j%2==0)
                    {
                        a[k]=(s[i][l]-'0')*2;
                        k++;
                    }
                    else
                    sum1+=s[i][l]-'0';
                }
            }
            for(i=0;i<8;i++)
            {
                if(a[i]<10)
                sum2+=a[i];
                else
                {
                    b=a[i]%10;
                    sum2+=b;
                    c=a[i]/10;
                    sum2+=c;
    
                }
            }
           if((sum1+sum2)%10!=0)
           printf("Invalid\n");
           else
           printf("Valid\n");
        }
        return 0;
    }
  • 相关阅读:
    PHP读取XML数据中CDATA内数值
    微信支付报ip错,怀疑是因为不能正确获取$_Server[addr])ip导致的
    微信支付错误两个问题的解决:curl出错,错误码:60
    tp框架 验证码的应用注意事项
    PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
    mysql存储小数
    windows服务器剪贴板不能共用的解决办法
    网页设为首页和添加收藏
    网页qq客服代码并自定义图片
    windows apache开启url rewrite
  • 原文地址:https://www.cnblogs.com/qisong178878915/p/2922085.html
Copyright © 2020-2023  润新知