每日刷题-3

目录

一、选择题

二、编程题

1、计算糖果

2、进制转换


一、选择题

1、

解析:在C语言中,以0开头的整数常量是八进制的,而不是十进制的。所以,0123的八进制表示相当于83的十进制表示,而123的十进制表示不变。printf函数用%o格式符输出八进制数,所以输出结果是123 173。

2、

解析:为在C语言中,按位与运算符&可以用来清除某些位,而按位或运算符|可以用来设置某些位 。如果要将flag的第二个bit置0,就需要用flag和一个只有第二个bit为0的数进行按位与运算,这个数就是~2,即2的按位取反。所以,flag&=~2就可以实现这个目的。

3、

解析:由题可得,&x44= Oxf8b82140,&x49= Oxf8b82145,&x99 = Oxf8b8221c,而x49和x99之间刚好相隔了5行,设每行N个元素,Oxf8b8221c - Oxf8b82145 = 5*N,得到N=43。

&x77 = &x79- 2,&x49+3*43- 2,可得到0xf8b82145 + 127为x77的地址。答案为A。

4、

解析:首先,定义了一个静态字符指针数组a,它包含了三个字符串元素:"morning","afternoon","evening"。然后,定义了一个字符指针的指针p,它指向了a的首地址,也就是第一个元素"morning"的地址。接着,调用了func函数,传入了p作为参数。在func函数中,参数m是一个字符指针的指针,它接收了p的值,也就是a的首地址。然后,对m进行了自增操作,使得m指向了a的下一个元素,也就是第二个元素"afternoon"的地址。最后,输出了m所指向的内容,也就是字符串"afternoon"。

5、

解析:**这个函数的功能是计算一个整数x的二进制表示中有多少个1。**然后,进入一个while循环,只要x不为0,就执行以下操作:

  • 将count加1,表示找到了一个1。
  • 将x与x-1进行按位与运算,并将结果赋给x。这个运算的作用是将x的最低位的1变成0,例如:如果x=1010(二进制),那么x-1=1001(二进制),x&(x-1)=1000(二进制)。
  • 最后,当x变为0时,退出循环,返回count的值,表示x的二进制表示中有多少个1。

6、

解析:F2: FO+F1=递归3次,F3: F2+F1=1+3+1 = 5,F4: F3+F2=1+5+3=9

F5: F4+F3=1+9+5=15,F6: F5+F4=1+15+9=25,F7: F6+F5=1+25+15=41,

F8: F7+F6=1 +41 +25 = 67

二、编程题

1、计算糖果

题目解析: 这道题目的实质是:判断三元一次方程组是否有解及求解, 这里是小学生都会的问题了。A=(a+c)/2;C=(d-b)/2;B2=(b+d)/2,B1=(c-a)/2;
如果B1不等B2则表达式无解。

代码如下:

cpp 复制代码
#include<iostream>
using namespace std;
int main() {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    int A = (a + c) / 2;
    int C = (d - b) / 2;
    int B1 = (c - a) / 2;
    int B2 = (b + d) / 2;
    if (B1 != B2)
        cout << "No";
    else
        cout << A << " " << B1 << " " << C;
    return 0;
}

2、进制转换

题目解析:本题思路很简单,首先想清楚原理:N进制数,每个进制位的值分别是X0*N^0,X1*N^1, X2*N^2.....,X0,X1,X2就是这些进制位的值。

首先定义一个字符串table,用于存储0到F的字符,表示从0到15的数。然后定义一个字符串str,用于存储转换后的结果。接着定义一个布尔变量flag,用于判断输入的数是否为负数。如果是负数,就将flag设为true,并将M取反。如果M为0,就直接将str设为"0"。

然后进入一个循环,不断地对M进行取余和除法操作,将M除以N得到的余数作为table的下标,找到对应的字符,并将其添加到str的末尾。同时将M更新为M除以N得到的商。当M为0时,退出循环。

最后判断flag是否为true,如果是,就在str的末尾添加一个负号。然后将str反转,输出结果。这样就完成了10进制转换成任意进制的过程。

cpp 复制代码
#include <iostream>
#include<string>
#include<algorithm>
using namespace std;

int main() {
    int M, N;
    string table = "0123456789ABCDEF";
    string str = "";
    bool flag = false;

    while (cin >> M >> N) {
        if (M < 0) {
            flag = true;
            M = -M;
        }
        if (M == 0)str = "0";

        while (M) {

            str += table[M % N];
            M = M / N;
        }
        if (flag)str += '-';

        reverse(str.begin(), str.end());
    }
    cout << str << endl;



}
相关推荐
luj_17682 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
mCell3 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
KaMeidebaby5 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_17685 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
tmlx3I0816 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-6 小时前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~6 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
ysa0510306 小时前
【板子】ST表
c++·笔记·算法·板子
CHHH_HHH7 小时前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
hurrycry_小亦7 小时前
洛谷题目:P1215 [USACO1.4] 母亲的牛奶 Mother‘s Milk 题解(本题简)
算法