123 请用 A 中的元素组成一个大于 K 的最小正整数
来源:互联网 发布:软考程序员试题网盘 编辑:程序博客网 时间:2024/05/16 05:33
23、Google2009 华南地区笔试题
给定一个集合 A=[0,1,3,8](该集合中的元素都是在 0,9 之间的数字,但未必全部包含),
指定任意一个正整数 K,请用 A 中的元素组成一个大于 K 的最小正整数。
比如,A=[1,0] K=21 那么输出结构应该为 100。
/*23、Google2009 华南地区笔试题给定一个集合 A=[0,1,3,8](该集合中的元素都是在 0,9 之间的数字,但未必全部包含),指定任意一个正整数 K,请用 A 中的元素组成一个大于 K 的最小正整数。 比如,A=[1,0] K=21 那么输出结构应该为 100。思路: 1.将数组A排序. 2.生成一个十个数的数组B,B[i]中的每一个的元素都是A中比i大的最小的元素, 如果不在A中则用A中所组合而成的最小的两位数代替, 比如上例则生成B[]={1, 3, 3, 8, 8, 8, 8, 8, 10, 10} 3.从给定的数最高位开始找到第一不在A中的位数i的权值m, 从第i位开始到最高位找到第一个权值m, B[m]!=max(A中组合而成的最小的两位数), 剩下的位都用A[0]代替。*/ #include<stdio.h>#include<algorithm>#include<stdlib.h>int max=0;int cmp(const void *a,const void *b){return *(int*)a-*(int*)b;}//判断当前位是否在A中 int is_in(int *A,int number, int len) {int i=0; int j=len-1;int mid=0;while (i<=j) {mid=(i+j)/2;if (A[mid]<number) i=mid+1;else if (A[mid]>number) j=mid-1;else return 1;}return 0;}int get_number(int *A, int* B, int number, int len){int bit=0;int i=0;int temp=number;int j,sum;j=sum=0;while(temp) {bit++;//位数 temp/=10;}int *p=(int *)malloc(sizeof(int)*bit);if (!p) {printf("out of space\n");exit(-1);}temp=number;i=0;while(temp) {p[i]=temp%10;temp=temp/10;i++;}for(i=bit-1;i>0;i--) if(!is_in(A,p[i],len)) //最左边开始 从高位到低寻找到一位不在A中 后面用A[0]补 break;//在A中的不用变 for (j=i;j<bit;j++) {if (max!=B[p[j]]) //P[J]表示在A中的那一位 用B[P[J]]表示 大于这位数 {p[j]=B[p[j]];break;}}if(j==bit) p[--j]=max;while(--j>= 0) p[j]=A[0];for (i=bit-1,sum=0;i>=0;i--) sum=sum*10+p[i];free(p);return sum;}int main(){int A[]={3,1,0,8};int i, j;int *B =NULL;int number=123;int temp=0;int result=0;int len=sizeof(A)/sizeof(int);qsort(A,len,sizeof(A[0]),cmp); if (A[0]!=0) max=A[0]*11;//自己表示 eg:1->11 2->22 3->33 else max=A[1]*10;//0 1->10 ;0 2->20 B=(int *)malloc(sizeof(int)*10);if (!B) {printf("out of space\n");exit(0);}j=i=0;while(i<len&&j<10) {if (A[i]>j) {B[j]=A[i];j++;}else i++;}while (j<10) {B[j]=max;j++;}result=get_number(A,B,number,len);printf("the answer is %d\n", result);return 0;}
0 0
- 123 请用 A 中的元素组成一个大于 K 的最小正整数
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- 给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- 给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- 每日一道算法题:Google 2009年某笔试题:求出元素位于0到9之间的集合A中大于某个给定正整数K的组成的最小正整数。
- 利用有限的几个数字(0~9)求一个数A大于正整数K且是最小的那个
- 大于K的最小正整数 的一种解法
- 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。例如,a=13243221,k=5,输出:12
- 陈利人 面试题 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。
- 找到大于一个正整数N的最小2的次幂数
- 正整数数组的最小不可组成和
- 给定一个数组,元素都是正整数,要求返回这些元素所组成的最大数
- 数组长度为n,其中有k-1个元素出现的次数大于 n/K(k>1),请找出这个K-1元素?
- n个正整数联接成一排,组成一个最小的多位整数
- n个正整数,联接成一排,组成一个最小(最大)的多位整数
- n个正整数联接成一排,组成一个最小的多位整数
- 设有n个正整数,将他们连接成一排,组成一个最小的多位整数
- n个正整数,联接成一排,组成一个最大(最小)的多位整数 python
- javascript代码与html分离进阶
- You don't have permission to access / on this server
- oracle查询优化
- 【二分图|最小点覆盖集】König定理及其证明
- iPhone开发:Objective-c中@property声明时的参数释疑
- 123 请用 A 中的元素组成一个大于 K 的最小正整数
- GCC剖析
- dnw不能打开问题
- 一种快速开平方并取倒数算法
- 精华摘要
- Mysql读写分离(1)
- Array、List、Map区别和联系
- java学习:对象的类型转换、多态
- 0xC0000005: 读取位置 0xfdfdfe01 时发生访问冲突/“Stack Overflow”