C/Python实现的一道笔试题
2016-07-05 20:37
369 查看
原题内容不便透露,笔者稍作了修改,题目如下:
有以下输入和输出,输入:1,2,3,4;得到输出:9,8,7,6
输入:2,5,7,6;得到输出:18,15,13,14
输入:5,1,3;得到输出:4,8,6
输入:2,4,3,2,4;得到输出:13,11,12,13,11
输入:7,8;得到输出:8,7
输入:5;
得到输出:0
试问输入:2,4,5,1; 得到的输出是什么。
此题乍一看好像没什么思路,其实稍微细心点便容易发现其中规律了,笔者在这题里主要还是练习了对输入数组的控制问题。
废话不多说,看出规律了答案自然出来了,上代码。
有以下输入和输出,输入:1,2,3,4;得到输出:9,8,7,6
输入:2,5,7,6;得到输出:18,15,13,14
输入:5,1,3;得到输出:4,8,6
输入:2,4,3,2,4;得到输出:13,11,12,13,11
输入:7,8;得到输出:8,7
输入:5;
得到输出:0
试问输入:2,4,5,1; 得到的输出是什么。
此题乍一看好像没什么思路,其实稍微细心点便容易发现其中规律了,笔者在这题里主要还是练习了对输入数组的控制问题。
废话不多说,看出规律了答案自然出来了,上代码。
#include <stdio.h> #define USELESSNUM 48 #define SPACE -16 #define ENTER -38
int *inputnums(int array[]); int *solution(int array[]); void output(int array[]); int main(void) { int array[100]; while(1) output(solution(inputnums(array))); return 0; } int *inputnums(int array[]) { printf("input your numbers:(postive number only)\n"); int i(0); while((array[i]=getchar()-USELESSNUM)!=ENTER) i++; int j(0); int emptypos(0); int merge(0); //计数作用,保存一次需要转换成十进制数的个数
int spacecount(0); //同样是计数,保存最后一次的空格个数 for(j;j<=i;j++) { switch(array[j]){ case SPACE: spacecount++; break; case ENTER: array[j-emptypos-spacecount]=ENTER; break; default: if(spacecount) { int k(j); for(k;array[k]!=SPACE&&array[k]!=ENTER;k++) merge++; int l(0); if(merge==1) l=j; else l=j+merge-1; int digit(1); int mergesum(0); for(l;l>=j;l--) { mergesum+=array[l]*digit; //十进制数整合 digit=digit*10; } array[j-spacecount-emptypos]=mergesum; //前面两个变量都在这贡献了作用,使我们算出整合好的数该放的位置 emptypos+=spacecount+merge-1; //保存除整合数字后的多余位置数 spacecount=0; merge=0; } break; } } return array; } int *solution(int array[]) //这就是问题的答案,相信之前没发现规律的同学看一下代码就全知道了。 { int len(0); int sum(0); for(len;array[len]!=ENTER;len++) { sum+=array[len]; } if(len==1) return NULL; int i(0); for(i;i<len;i++) { array[i]=sum-array[i]; } return array; } void output(int array[]) { if(array) { int i(0); printf("output: "); for(i;array[i]!=ENTER;i++) printf("%d ",array[i]); printf("\n"); } else printf("output: 0\n"); }以上代码不能在有负数作输入的情况下使用,因为这段代码判断空格和回车的依据是ASCII码,一旦输入负数代码就乱套了,这是此段代码的缺点。优点是输入控制得比较好,无论你在输入的时候在数字前后,中间,末尾插入多少空格,数字位数,只要不超过数组的长度,都能正确的输入并输出答案。
相关文章推荐
- Linux C函数参考手册(PDF版)
- 输入法的一些小技巧
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#用链式方法表达循环嵌套
- C#中的委托数据类型简介
- Sql Server中存储过程中输入和输出参数(简单实例 一看就懂)
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C#实现的SN快速输入工具实例
- C和指针小结(推荐)
- C++中explict关键字用法
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- C++实现将输入复制到输出的方法
- 字符串的组合算法问题的C语言实现攻略