美文网首页
颠倒的号码牌/最多约数问题

颠倒的号码牌/最多约数问题

作者: Super_邓帅 | 来源:发表于2016-09-06 22:08 被阅读0次

    颠倒的号码牌

    题目:

    小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。其标价都是4位数字(即千元不等)。小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了。

    这种价牌有个特点,对一些数字,倒过来看也是合理的数字。如:1 2 5 6 8 9 0 都可以。这样一来,如果牌子挂倒了,有可能完全变成了另一个价格,比如:1958 倒着挂就是:8561,差了几千元啊!! 当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字。 有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了! 庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。 请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?
    答案是一个4位的整数,请通过浏览器直接提交该数字。

    #include<stdio.h>   
    #include<math.h>  
      
    int main(){  
        int num1[7]={0,1,2,5,6,8,9},num2[7]={0,1,2,5,9,8,6};//因为6要变成9,9要变成6,所以定义两个数组,6 9位置颠倒   
        int a,b,c,d,i,j,k,m;  
        int p1,p3,diff1,p2,diff2;//p1,p3表示赔二百的,p2表示挣八百的   
        for(a=1;a<7;a++){  
            for(b=0;b<7;b++){  
                for(c=0;c<7;c++){  
                    for(d=1;d<7;d++){  
                        p1=num1[a]*1000+num1[b]*100+num1[c]*10+num1[d];  
                        p3=num2[d]*1000+num2[c]*100+num2[b]*10+num2[a];  
                        diff1=fabs(p1-p3);   
                        if(diff1>200&&diff1<300){  
                            for(i=1;i<7;i++){  
                                for(j=0;j<7;j++){  
                                    for(k=0;k<7;k++){  
                                        for(m=1;m<7;m++){  
                                            p2=num1[i]*1000+num1[j]*100+num1[k]*10+num1[m];  
                                            diff2=fabs(p2-(num2[m]*1000+num2[k]*100+num2[j]*10+num2[i]));   
                                            if(diff2>800&&diff2<900&&fabs(diff1-diff2)==558){  
                                                if(p1<p3){  
                                                    printf("%5d",p3);  
                                                    return 0;  
                                                }else{  
                                                    printf("%5d",p1);  
                                                    return 0;  
                                                }  
                                                      
                                            }  
                                        }  
                                    }  
                                }  
                            }  
                        }  
                    }  
                }  
            }  
        }   
        return 0;  
    }
    


    最多约数问题

    题目:

    最多约数问题。正整数 x 的约数是能整除x的正整数,其约数的个数记为div(x),例如div(10)=4。设 a 和 b 是两个正整数,找出 a 和 b 之间约数个数最多的数 x 的约数个数。

    样例输入: 1 36
    样例输出: 9

    #include<stdio.h>
    
    int main(){
        int a,b;//输入的a和b
        int num,maxnum=2;//maxnum表示x约数的个数,num表示计算过程中某个是的约数个数 
        int i,j;
        scanf("%d%d",&a,&b); //input a and b
        for(i=b;i>=a;i--){   //从大到小遍历 
            if(i%2==0){     //约数最多的一定是偶数 
                num=2;  //1和i是固有的约数,所以num起始值为2 
                for(j=2;j<=i/2;j++){             //j代表一个约数 
                    if(i%j==0){                
                        if(j==i/j){    //例如 36=6*6的情况 
                            num++;
                        }else if(j<i/j){        
                            num+=2;
                        }else{
                            break;
                        }
                    }
                } 
                if(num>maxnum)
                    maxnum=num;
            }
        }
        printf("%d",maxnum); 
        return 0;
    } 
    

    相关文章

      网友评论

          本文标题:颠倒的号码牌/最多约数问题

          本文链接:https://www.haomeiwen.com/subject/eotjettx.html