美文网首页SimpleCTF
WpsecCTF PPC部分

WpsecCTF PPC部分

作者: 一纸笔墨 | 来源:发表于2018-03-26 18:18 被阅读21次

    1 时间计算

    这题是选自阿里的2018校招编程题,当时在30分钟之内没做出来,有点沮丧,事后查找了一下别人写的代码,感觉都不是很好,于是自己写了一个
    源码稍后发布

    #include"stdio.h"
    
    int a[6] = { 0,0,5,6,0,6 };
    
    //排序的数组 排序的位数 排序的类型(true 升序/ false 降序)
    int sort(int *a,int num,bool type) {
        for (int i = 0; i<num-1; i++) {
            for (int j = i + 1; j<num; j++) {
                if ((type&&a[i] > a[j]) || (!type&&a[i] < a[j])) {
                    a[i] = a[i] ^ a[j];
                    a[j] = a[i] ^ a[j];
                    a[i] = a[j] ^ a[i];
                }
            }
        }
        return 1;
    }
    int isInData(int i){
        int b[6]={0},n=5;
        while(i){
            b[n--]=i%10;
            i/=10;
        }
        sort(b,6,true);
        for(int i=0;i<6;i++){
            if(a[i]!=b[i]){
                return 0;
            }
        }
        return 1;
    }
    
    int main()
    {
        //因为总是要输入6个数的,所以n无所谓的。。但是在线答估计要加
        //int n;
        int max=0,min=0,temp[2]={0},j=0;
        sort(a, 6, true);
        //scanf_s("%d", &n);
        //for (int i = 0; i < 6; i++) {
        //  scanf_s("%d", &a[i]);
        //}
        for(int i=0;i<6;i++){
            min=min*10+a[i];
            max=max*10+a[5-i];
        }
    
        //规则1 不符合时间规则的统统去掉 可以自己尝试就知道了
        if((min>599&&min<1000)||(min>5599&&min<10000)||(min>59999&&min<100000)||(min>235599)){
            printf("N/A\n");
            return 0;
        }
    
        //最浪费时间的地方,但是也不慢多少~
        for(int i=min;i<max;i++){
            //判断时间格式是否正确
            if((i/100000<3)&&(i/10000)%10<4&&(i/1000)%10<6&&(i/10)%10<6){
                //判断i中的所有元素是否和a相同   
                if(isInData(i)){
                    //printf("%d\t",i);
                    temp[j]=i;
                    temp[1]=temp[j];
                    j=1;
                }
            }
        }
    
        if(temp[1]==temp[0]){
            printf("%06d\n",temp[0]);
        }
        else{
            printf("%06d %06d\n",temp[0],temp[1]);
        }
        return 0;
    }
    


    2 A+B+C

    很简单:

    print(sum([int(n) for n in input().split(' ')]))
    


    3 螺旋矩阵

    需要考验逻辑能力,只能根据点的坐标去计算出它的数值,不能通过预先计算好一个螺旋矩阵来计算坐标的值,需要稍稍费些脑筋

    #include"stdio.h"
    #include"stdlib.h"
    #include"malloc.h"
    int n=1;
    //计算当前层数外的所有层的点个数
    int getCircle(int a){
        if(a==0)
            return 0;
        return (4*n+4-8*a)+getCircle(a-1);
    }
    int main()
    {
        //输入
        int x,y;
        printf("please input your number:\n");
        //scanf("%d %d %d",&n,&x,&y);
        n=5;
        x=3,y=3;
        //计算层数,如果n为单数的话,一半=(n+1)/2
        int halfN=n%2==0?n/2:((n+1)/2);
        int t1=x<halfN?x:n-1-x;
        int t2=y<halfN?y:n-1-y;
        //层数
        int layer=t1<t2?t1:t2;
        int num;
        if(x==layer){
            num=getCircle(layer)+y+1-layer;
        }
        else if(y==n-1-layer){
            num=getCircle(layer)+x+n-3*layer;
        }
        else if(x==n-1-layer){
            num=getCircle(layer+1)-n+2-y+layer*3;
        }
        else{
            num=getCircle(layer+1)-x+1+layer;
        }
        printf("%d\n",num);
        return 0;
    }
    
    

    另外,附带上一份螺旋矩阵的显示:

    #include<stdio.h>
    #include<stdlib.h>
    //N阶螺旋矩阵 
    int main() 
    { 
        int N,i,j,n,num=1; 
        int **a; 
        printf("输入你要输出的几阶中断:"); 
        scanf("%d",&N); 
        a = (int **)malloc(sizeof(int *) * N);//每一行的地址
        for(i = 0; i < N; i++)
            a[i] = (int *)malloc(sizeof(int) * N);//存放每一行的数字
        for(n=0;n<=N/2;n++) 
        { 
            for(j=n;j<=N-n-1;j++) 
                a[n][j]=num++; 
              
            for(i=n+1;i<N-n-1;i++) 
                a[i][N-n-1]=num++; 
              
            for(j=N-n-1;j>n;j--) 
                a[N-n-1][j]=num++; 
              
            for(i=N-n-1;i>n;i--) 
                a[i][n]=num++; 
        }   
        //输出螺旋矩阵  
        for(i=0;i<N;i++) 
        { 
            for(j=0;j<N;j++) 
                printf("%2d ",a[i][j]); 
            printf("\n"); 
        }
        return 0; 
    }
    
    
    

    相关文章

      网友评论

      本文标题:WpsecCTF PPC部分

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