zoukankan      html  css  js  c++  java
  • 第二次上机总结

    第二次上机总结

    问题

    (先咕了) 多打点代码就熟练了

    AC代码(非官方题解)

    A test a xor b

    • 签到题 送分题
    • 异或用法和数据范围
    #include <stdio.h>
    int main(){
        long long a,b;int n;
        scanf("%d",&n);
        while(n--){
            scanf("%lld%lld",&a,&b);
            printf("%lld
    ",a^b);
        }
        return 0;
    }
    

    B 五则运算

    • 签到题 送分题
    • 分支结构 ifswitch的用法
    #include <stdio.h>
    int main(){
        char calc[50] = {0};
    	while(fgets(calc,50,stdin)){
    		int a,b;char op;
    		sscanf(calc,"%d%c%d",&a,&op,&b);
    		switch(op){
    		case '+':
    			printf("%d
    ",a + b);
    			break;
    		case '-':
    			printf("%d
    ",a - b);
    			break;
    		case '*':
    			printf("%d
    ",a * b);
    			break;
    		case '/':
    			if(b == 0){
    				puts("WA");
    			}
    			else{
    				printf("%d
    ",a / b);
    			}
    			break;
    		case '%':
    			if(b == 0){
    				puts("WA");
    			}
    			else{
    				printf("%d
    ",a % b);
    			}
    			break;
    		default:
    			break;
    		}
    	}
        return 0;
    }
    

    C 有理有据的送分

    • 模拟可以做
    • 这里给出我的思路 开数组 用memset模拟 最后统计
    #include <stdio.h>
    char buf[10010]={0};
    int main(){
        int m,n,i,j,cnt = 0;
    	memset(buf,1,10002);
    	scanf("%d%d",&n,&m);
    	while(m--){
    		scanf("%d%d",&i,&j);
    		memset(buf + i,0,(j - i + 1));
    	}
    	for(i = 1;i <= n;i++){
    		if(buf[i])cnt++;
    	}
    	printf("%d
    ",cnt);
        return 0;
    }
    

    D 迷惑行为

    • 数学函数 浮点数精度 数据范围
    • 最后一组数据很
      ps: 小迷弟的真正迷惑行为是一边debug一边骂
    #include <stdio.h>
    #include <math.h>
    int main(){
    	double a,b;
    	while(~scanf("%lf%lf",&a,&b)){
    		printf("%lld
    ",(long long)((log10(b) + 1e-9) / log10(a)));
    	}
    	return 0;
    }
    

    E 1917大班长(这是17系助教玩梗)

    • 数组
    • 开大数组计数,同时不停的记录最大值.
    • 遍历整个数组即可找到所有最大值
    • 千万别排序 会超时
    #include <stdio.h>
    #define MAX(a,b) (((a)>(b))?(a):(b))
    int s[1000020] = {0};
    int main(){
    	int n,cur,i,m = 0;
    	scanf("%d",&n);
    	while(~scanf("%d",&cur)){
    		s[cur]++;
    		m = MAX(m,s[cur]);
    	}
    	for(i = 1;i <= n;i++){
    		if(s[i] == m){
    			printf("%d %d
    ",i,s[i]);
    		}
    	}
    
    	return 0;
    }
    

    F 进制转换

    • 进位制 数学问题
    • 思路是提取出每一位然后反着输出
    #include <stdio.h>
    int main(){
        int num,radix;
        scanf("%d%d",&radix,&num);
    	int arr[32] = {0},i=0;
    	while(num){
    		arr[i] = num % radix;
    		num /= radix;
    		i++;
    	}
    	while(i--){
    		putchar(arr[i] + '0');
    	}
    	putchar('
    ');
        return 0;
    }
    

    G ZYT学“真·位运算”

    • 位运算
    • 用"位与"和"移位"提取指定字节
    • 用"位或"和"移位"把字节拼起来
    #include <stdio.h>
    #define GETBYTE0(i) ((i)&(0xff))
    #define GETBYTE1(i) (((i)&(0xff00))>>8)
    #define GETBYTE2(i) (((i)&(0xff0000))>>16)
    #define GETBYTE3(i) (((i)&(0xff000000))>>24)
    #define GETBYTE(x,i) (((x)&((0xff)<<(8*i)))>>(8*i))
    int main(){
        unsigned int n,m = 0;
    	scanf("%u",&n);
    	m |= GETBYTE(n,1);
    	m |= ((GETBYTE(n,0)) << 8);
    	m |= ((GETBYTE(n,3)) << 16);
    	m |= ((GETBYTE(n,2)) << 24);
    	printf("%u",m);
        return 0;
    }
    
    

    H 朵朵买甜瓜

    • 逻辑问题
    • 枚举(如何把语言转化为代码是重点)
      下面搬运官方题解
    #include <stdio.h>
    int main() {
        int i, x[20] = {0};
        for (i=1; i<=16; i++)
            scanf("%d", &x[i]);
        for (i=1; i<=4; i++) {
            int w[5] = {0};
            w[i] = 1;
            if ((w[x[1]]==x[2]) + (w[x[3]]==x[4]) == 1 &&
                (w[x[5]]==x[6]) + (w[x[7]]==x[8]) == 1 &&
                (w[x[9]]==x[10]) + (w[x[11]]==x[12]) == 1 &&
                (w[x[13]]==x[14]) + (w[x[15]]==x[16]) == 1)
                printf("%d
    ", i);
        }
        return 0;
    }
    
  • 相关阅读:
    计算机网络(1)----概述
    博客园自定义样式
    linux进程
    接口回调解析
    优先级队列
    双栈实现队列
    递归解决反转链表的一部分
    Multisim 之逻辑转换仪
    Multisim 如何添加文本 如何编辑文本字体
    Multisim 中的一些快捷键
  • 原文地址:https://www.cnblogs.com/woshilxcdexuesheng/p/14579953.html
Copyright © 2011-2022 走看看