问题描述:

n元一维向量旋转问题数将向量ab变为ba。如何将向量abc变为cba? (这对交换非相邻内存块问题进行了建模)

问题解析:

1、这里需要用到一个重要的性质:CBA=(ArBrCr)r   如果想到这个性质,那么基本上问题就解决一半了!解决方案可以类似于QusetionB的解决方案3,见:

编程珠玑之第二章questionB: n元一维向量旋转问题

解决方案:

如果n=12, A = abc, B = de, C = fghijkl  那么有举例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <cstdio>
#include <cstdlib>      // srand, rand
#include <cassert>      // assert

/************************************************************************/
// 函数名称:myswap
// 函数目的:反转arr索引在[index_a, index_b]之间的值
// 函数参数:arr:要交换的数组 arraysize:数组长度  index_a\index_b:数组索引
/************************************************************************/
void myswap(int* arr, int arraysize, int index_a, int index_b)
{
    assert(index_a >= 0 && (index_b-index_a) >= 0 && index_b < arraysize);

int i = index_a, j = index_b;
    for (;  i <= j; i++, j--){
        int temp = *(arr+i);
        *(arr+i) = *(arr + j); *(arr + j) = temp;
    }

return;
}

int main()
{
    int arr[12] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'};

int arraysize  = 12;   // 数组长度

//假设 n=12, A = abc, B = de, C = fghijkl 则可以如下进行
    myswap(arr, arraysize, 0, 2);
    myswap(arr, arraysize, 3, 4);
    myswap(arr, arraysize, 5, 11);
    myswap(arr, arraysize, 0, 11);

for (int i = 0; i < 12; ++i)
    {
        printf("%c\t", arr[i]);
    }

return 0;
}

输出结果:

心得疑惑:

1、 一些数学的基本性质是解决实际问题算法的根本!

编程珠玑之第二章习题5相关推荐

  1. 编程珠玑之第二章习题10

    问题描述: 10.某一天,一个新研究员向托马斯·爱迪生报到.爱迪生要求他计算出一个空灯泡盒的容积.在使用测径仪和微积分进行数小时的计算后,这个新员工给出了一个答案--150立方厘米.而爱迪生在几秒钟之 ...

  2. 编程珠玑第12章习题

    内容来自互联网,做了一些修改 参考: http://blog.csdn.net/tianshuai1111/article/details/7583297 http://blog.csdn.net/t ...

  3. 编程珠玑第五章习题五——C++实现二分搜索时进行错误检测

    一,概述 主要讲解如何保证编程的正确性.在程序中加入断言(assert(断言内容) //如果错误,则终止程序.否则正常执行). typdef   //声明自定义类型 typedef int size; ...

  4. 编程珠玑第六章习题二——C++实现一个数的因子分解

    引申为一道题目: 将大于1的自然数N进行因式分解,满足N=a1*a2*a3-am 编一程序,对任意的自然数N, 求N的所有形式不同的因式分解方案总数. 如N=12,共有8种分解方案,它们分别是: 12 ...

  5. 编程珠玑第四章习题答案

    主要内容来自于互联网,自己做了一定的修改 1.为了保证范围不超过范围,我们需要在初始化的时候,让变量不超出范围.这样每次循环得到的新的范围是慢慢缩小的,不会越界. 2 返回t在数组x中第一次出现的位置 ...

  6. 编程珠玑第三章习题答案

    1 税收问题 .if-else语句的每个分支的形式都差不多,我们可以用数组来使循环简单一点.数组中每个点表明一个阶段,用level[i]表示阶段i的起始点,tax[i]表示阶段i的税率.然后就是输入一 ...

  7. 用python编程、假设一年期定期利率_第二章-习题答案

    第二章习题 1 . 写一个算法(流程图和 python 程序) :输入三个数,输出其最 大者. numA=3 numB=4 numC=5 if numA <= numB: if numC pri ...

  8. 【编程珠玑】陪着奶猫看看书--《编程珠玑》第一章

    陪着奶猫看看书–<编程珠玑>第一章 首先说说小奶猫我为什么要读<编程珠玑>这本神作,当年小奶猫刚刚进入大学时候是个纯洁的少年,啥都不懂,要是哪个女生下午在外面问我带身份证没有, ...

  9. 统计学习导论:基于R应用——第二章习题

    目前在看统计学习导论:基于R应用,觉得这本书非常适合入门,打算把课后习题全部做一遍,记录在此博客中. 第二章习题 1. (a) 当样本量n非常大,预测变量数p很小时,这样容易欠拟合,所以一个光滑度更高 ...

最新文章

  1. 视图解析自定义视图和自定义视图解析器——未完待续
  2. 操作 神通数据库_国产数据库最好的时代
  3. 操作 Wave 文件(3): 接触 mmio 系列函数
  4. websocket的WebSocketServer无法注入service
  5. MySQL卸载不干净或Mysql安装失败的解决办法
  6. sqlldr mysql_Oracle中的SQLLDR工具使用
  7. Ubuntu 20.04上编译OpenSSL的编译选项设置
  8. 怎么从转移特性曲线上看dibl_MOS管工作原理详解:各种mos管的转移特性曲线分析...
  9. 不知道这些你就OUT了,2019年最常见又实用的Android开发面试题
  10. 量子点表面修饰PEG/抗体/金属/细胞膜/无机材料标记与制备
  11. 企业级运维——Mysql主从复制(异步、半同步、全同步)
  12. 留用户、补内容,在线音乐暗战不停
  13. oracle 11g latch之v$latch系列三
  14. Verilog实现25分频电路代码
  15. 工具 | 快速视频压缩与格式转换
  16. SAP ABAP PP常用数据库表
  17. xwiki部署_开源Wiki应用平台---XWiki的部署
  18. PB DW内容自适应
  19. 电源选项中的S1,S2,S3,S4,S5
  20. 遇到过那些问题和难点?

热门文章

  1. Tor 浏览器,中文名洋葱浏览器
  2. 9. MySQL -- JDBC入门
  3. VideoUrlParser互联网视频地址分析工具,支持优酷、土豆等
  4. 【Linux学习手册--新手必看篇】命令:chpasswd
  5. Winrunner8,0的安装问题与解决方案;
  6. 2020阿里巴巴技术面试题集锦!(附答案)
  7. Python使用pyhive,impala,JayDeBeApi连接Hive(含Kerberos)
  8. plc里的二进制 用计算机,如何理解二进制和十六进制(电工入门PLC知识普及)...
  9. 5G与工业互联网融合创新,助力企业降本提质增效
  10. uniapp日历原生插件