众所周知,逆向思维在知识领域一直倍受青睐,因为这种思想有时能够很巧妙地解决一些看似很难的问题。更有人有此思想设计出强大的算法,如回溯等。下面是一道例题:

[例] 编码问题:设有一个数组A:ARRAY[0..N-1]OF INTEGER;数组中存储的元素为0-N-1之间的整数,且A[I]≠A[J]       (当I≠J)时。

例如:N=6时,有:(4,3,0,5,1,2)

此时,数组A的编码定义如下:

A[0]的编码为0:

A[I]的编码为:在A[0],A[1],……A[I-1]中比A[I]的值小的元素的个数(I=1,2,……N-1)

所以上面数组A的编码为:B=(0,0,0,3,1,2)

程序要求解决以下问题

① 给出数组A后,求出其编码;

② 给出数组A的编码后,求出A的原数据。

[算法设计] 问题①比较简单,只要统计一下即可。问题②是一个线性表的删除问题,将0到 N-1之间的N个整数顺序放在一个线性表C中,取出编码数组B中的最后一个元素b[N-1],则C中的第b[N-1]个元素为数组A的最后一个元素,取出该元素后从C中删除之,再取编码数组B中的前一个元素,重复上述操作,直到数组A的所有元素都得到为止。

下面是代码:

#include <stdc.h>//万能头文件(自编,VS中没有)
int a[10000], b[10000], c[10000];
int arin(void)
{int n = 0, i = 0;while (scanf("%d", &a[i]) == 1 && getchar() != '\n'){n++;i++;}return n + 1;
}//读入数据给数组的函数
int main()
{int n = arin(), i, j = 0, k = 0, m = 0;for (i = 0; i<n; i++)b[i] = 1;for (i = n - 1; i >= 0; i--){m = 0;k = a[i] + 1;while (k > 0){if (b[m] != 0)k--;m++;}b[m-1] = 0;c[j++] = m - 1;}for (i = n - 1; i >= 0; i--)printf("%d ", c[i]);return 0;
}

关于回溯的八皇后问题,以后可能会补充。

关于逆向思维在程序设计中的应用相关推荐

  1. R程序设计中的IF、IFELSE、SWITCH

    R程序设计中的IF.IFELSE.SWITCH 目录 R程序设计中的IF.IFELSE.SWITCH R程序设计中的IF语句 R程序设计中的IFELSE语句

  2. 在Java程序设计中,设置环境变量path和classpath的作用分别是什么?

    在Java程序设计中,设置环境变量path和classpath的作用分别是什么? asd79308 10级  分类: 编程开发  被浏览344次  2013.07.22 额,你这问题问的有够" ...

  3. 学号20175313 《程序设计中临时变量的使用》第八周

    目录 程序设计中临时变量的使用 一.题目要求 二.运行结果截图 三.遇到的问题及其解决方法 四.代码链接 五.心得体会 程序设计中临时变量的使用 一.题目要求 //定义一个数组,比如int arr[] ...

  4. 浅谈单片机程序设计中的“分层思想”!

    浅谈单片机程序设计中的"分层思想",并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用.看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种 ...

  5. 在ASP程序设计中在使用Response对象

    Response对象在ASP程序设计中的主要功能是从浏览器端到服务器端传送数据到浏览器的客户端,我们知道ASP的脚本是在服务器端执行的,他并没有输出"值"的功能.要想拥有输出&qu ...

  6. 状态机思路在程序设计中的应用

    状态机思路在单片机程序设计中的应用 状态机的概念 状态机是软件编程中的一个重要概念.比这个概念更重要的是对它的灵活应用.在一个思路清晰而且高效的程序中,必然有状态机的身影浮现. 比如说一个按键命令解析 ...

  7. 程序设计中的驼峰原则

    程序设计中的驼峰原则是程序中的变量和函数名的命名原则,比如变量username要写作userName或者UserName 规则:变量名或函数名的每一个单词的首字母要大写,第一个单词的字母可大写或者小写 ...

  8. createprocess重启程序_C++_VC程序设计中CreateProcess用法注意事项,对于windows程序设计来说,启动 - phpStudy...

    VC程序设计中CreateProcess用法注意事项 对于windows程序设计来说,启动一个进程有三种方法:WinExec,ShellExecute,CreateProcess.这里仅对Create ...

  9. ux设计中的各种地图_移动应用程序设计中的常见UX错误

    ux设计中的各种地图 Have you ever tried a new app, only to realize you have no idea how to use it? 您是否曾经尝试过一个 ...

最新文章

  1. go var type 互转_Go语言学习笔记(第九章) 结构体
  2. 重磅!Nature子刊:利用GAN来​“深度伪造大脑数据”可以改善残疾人的脑机接口...
  3. 1分钟快速生成用于网页内容提取的xslt
  4. ios浏览器不支持onblur事件
  5. Core Java笔记 6.部署应用程序
  6. 转-- iOS 30多个iOS常用动画,带详细注释
  7. Ruby Fiber指南(五): 实现Actor,兼谈Erlang的process调度
  8. 办公软件excel表格_软件和Excel表格管理仓库的区别?
  9. 关于C#GB2312编码问题
  10. 如何做一个基于微信评选投票小程序系统毕业设计毕设作品
  11. Webstorm里面创建XMl文件
  12. Kruskal(克鲁斯卡尔)
  13. UIWebView 使用
  14. range 小程序picker_微信小程序picker滚动选择器使用详解
  15. 注销系统的logout命令
  16. stl string 源代码分析
  17. “即刻搜索”为什么使用率几乎为零
  18. c++简易病毒(附代码)
  19. 滑铁卢计算机专业世界最新排名,滑铁卢大学计算机专业全球排名
  20. 爬虫学习,尝试爬取小说网站

热门文章

  1. sas学习笔记之sas发送邮件
  2. dlib 人脸识别论文 One Millisecond Face Alignment with an Ensemble of Regression Trees
  3. 今天是来上海最冷的一天 也许 是 2004年底最冷的一天了.
  4. 个人笔记(2016.12.01)
  5. 简单学习一下AES算法:GCM、ECB、CFB、OFB等
  6. [附源码]JAVA+ssm计算机毕业设计java抽奖系统设计(程序+Lw)
  7. 什么是模块化开发?模块化开发有哪些方法
  8. MobX 学习 - 01 MobX 简介
  9. 苏梅岛中文离线地图App上线
  10. css拖动音乐进度条,用css3绘制酷狗音乐闪烁的进度条