当前位置: 首页 > article >正文

【刷题笔记】二维数组地址计算+算法分析+进制转换

目录

一、二维数组地址计算

题目:

分析:

解答:

二、算法分析举例

题目:

分析:

解答:

三、进制转换

题目:

分析:

解答:


一、二维数组地址计算

题目:

        二维数组X按行顺序存储,其中每个元素占1个存储单元。若X[4][4]的存储地址为Oxf8b82140,X[9][9]的存储地址为Oxf8b8221c,则X[7][7]的存储地址为?

分析:

        本题只是告知了二维数组两个位置的地址。需要知道另一个位置的地址,那么我们就需要根据行数和列数进行求解。

        思路1:对此,即然我们不知道具体的行号、列号以及起始位置,可以根据两个已知条件列出等式,求解二元一次方程组即可。

        但是,思路1没有充分利用题中给的条件:每个元素占1个存储单元,所以有优化方案思路2。

        思路2:我们可以根据两个已知条件简单的算出每个行占用的存储单元,即X[4][4]只需要加上5就可以得到X[4][9]了,而得到的位置和X[9][9]相差5行,地址相减就可以得到每个行占用的存储单元。然后X[7][7]不就是在X[4][4]的基础上增加了3行,在向右增加了3个存储单位,就可以得到答案了。

解答:

二、算法分析举例

题目:

        求函数返回值,输入x=9999。

int func(int x){
    int count=0;
    while (x)
    {
        count++;
        x=x&(x-1);//与运算
    }
    return count;
}

分析:

        在拿到一道程序输入题的时候,不可盲目带入运算。即然给了一段程序,那么它应该是完成某些功能进行设计的。我们不妨首先分析出此段程序的功能。(带入简单的例子进行分析)

        得到程序功能后,往往解答就简单了。

解答:

        针对于此程序,我们不妨带入7进去运算。既然涉及到位运算-7(111(2))。count肯定是一个计数器,我们需要得到其统计的是什么个数。

         可以发现,随着每一次循环原来二进制中的0会多一个,直到原数全为0.可以发现此算法就是统计当前数存在多少个1的。了解这点后,我们只需要对十进制数9999进行二进制展开查看1的个数即可。

        9999 = 10011100001111,一共有8个零,这也是函数的返回值。

三、进制转换

题目:

牛客网链接:进制转换_牛客题霸_牛客网

描述

        给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数

输入描述

        输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。

输出描述

        为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)

示例

输入:7 2
输出:111

分析:

        按照正常十进制转换其余进制数的方法来。除数取余法。需要注意每次取余保存,需要逆置以及针对负数情况。

        对于取余数保存的时候利用字符串,我们可以针对0~16写一个字符数组,这样就可以应对字符串拼接问题。

解答:

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
    int m, n;
    cin >> m >> n;
    string res, str = "0123456789ABCDEF";
    bool flag = false;
    if (m < 0){
        flag = true;
        m = -m;
    }
    do{
        res += str[m % n];
        m  /= n;
    }while(m);
    if (flag) res += "-";
    reverse(res.begin(), res.end());
    cout << res << endl;
    return 0;
}


http://www.kler.cn/a/17435.html

相关文章:

  • 微服务day08
  • EXCEL延迟退休公式
  • change buffer:到底应该选择普通索引还是唯一索引
  • 2411d,右值与移动
  • 国家网络安全法律法规
  • 设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
  • 计算机网络基础知识(二)—— 什么是Ip地址、Mac地址、网关、子网掩码、DNS
  • SpringBoot实现导出Excel功能
  • 汽车出租系统【纯控制台】(Java课设)
  • 互联网摸鱼日报(2023-05-02)
  • 计算机必读基础书籍
  • 【圈友app】为什么要使用MongoDB数据库?什么样的数据适合存储到MongoDB数据库?
  • 【C++学习】类和对象--多态
  • 牛客网HJ31 单词倒排
  • 第七章 使用ssh服务管理远程主机
  • 中盐集团:加快推进数智化转型,引领盐行业高质量发展
  • leetcode刷题之有关树的算法
  • Codeforces Round 863 (Div 3)总结
  • cmake编译
  • 截图的背景色如何去除?这里介绍一个小工具
  • buildroot系统调试苹果手机网络共享功能
  • 人机智能中几个困难问题浅析
  • API接口的对接流程和注意事项
  • STM32F4_十进制和BCD码的转换
  • 【地铁上的设计模式】--结构型模式:装饰器模式
  • IJKPLAYER源码分析-重要字段