求AB数
来源:互联网 发布:nba视频直播软件 编辑:程序博客网 时间:2024/05/20 07:19
给定两个正整数a,b,分别定义两个集合L和R,
集合L:即把1~a,1~b中整数乘积的集合定义为L = {x * y | x,y是整数且1 <= x <=a , 1 <= y <= b};
集合R:1~a,1~b中整数异或的集合定义为集合R = {x ^ y | x,y是整数且1 <= x <=a , 1 <= y <= b},其中^表示异或运算。
现从L中任取一个整数作为A,从R中任取一个整数作为B,如果必要在B的左边补0,使得B达到:“b的位数+1”位(十进制),然后把B接到A的右边,形成的一个十进制数AB。求所有这样形成数的和。
输入a,b 1<=a<=30, 1<=b<=10000000。
输出所有产生的AB数的和,由于结果比较大,输出对1000000007取余数的结果。
例如:a = 2, b = 4,
则L = {1 * 1, 1 * 2, 1 * 3, 1 * 4, 2 * 1, 2 * 2, 2 * 3, 2 * 4} = {1, 2, 3, 4, 6, 8}
R = {1^1,1^2,1^3,1^4,2^1,2^2,2^3,2^4} = {0, 1, 2, 3, 5, 6}
相接的时候保证R中的数至少有两位,所以相接后所有的AB数的集合是
{
100, 101, 102, 103, 105, 106,
200, 201, 202, 203, 205, 206,
300, 301, 302, 303, 305, 306,
400, 401, 402, 403, 405, 406,
600, 601, 602, 603, 605, 606,
800, 801, 802, 803, 805, 806
}
输出它们的和:14502
#include<stdio.h>#define M 100#define N 100//归并排序void merge(int a[],int first, int mid ,int last){ int i=first; int j=mid+1; int k=0; int b[N]; while(i<=mid && j<=last) { if(a[i]>a[j]) { b[k]=a[j]; j++; k++; } else { b[k]=a[i]; i++; k++; } } while(i<=mid) { b[k++]=a[i++]; } while(j<=last) { b[k++]=a[j++]; } for(i=first,k=0; i<=last; i++) { a[i]=b[k]; k++; }}void MergeSort(int a[], int first ,int last){ if(first<last) { int mid=(first+last)/2; MergeSort(a,first,mid); MergeSort(a,mid+1,last); merge(a,first,mid,last); }}int GetNum(int a){ int num=0; while(a!=0) { a=a/10; num++; } if(num==0)return 1; else return num;}int run (int a,int b){ int i; int j; int len=0; int kl=0; int kr=0; int m=0; int n=0; int lenl; int lenr; int L[M]={0}; int R[N]={0}; int num=0; float result=0; int temp=1; for(i=1; i<=a; i++) { for(j=1; j<=b; j++) { L[m++]=i*j; R[n++]=i^j; len++; } } //对L和R进行排序,然后剔除那些重复的元素 MergeSort(L,0,len-1); MergeSort(R,0,len-1); //剔除数组中重复的元素 for(i=1; i<len; i++) { if(L[i] != L[i-1]) { L[++kl]=L[i]; } if(R[i]!=R[i-1]) { R[++kr]=R[i]; } } lenl=kl+1; lenr=kr+1; for(i=0; i<lenr; i++) { num=GetNum(R[i]); num++; temp=1; while(num!=0) { temp=temp*10; num--; } for(j=0; j<lenl; j++) { result+=L[j]*temp+R[i]; if(result>1000000007) { result=result-1000000007; } } } return result;}//start 提示:自动阅卷起始唯一标识,请勿删除或增加。int main(){ printf("%d",run(2,4));}//end //提示:自动阅卷结束唯一标识,请勿删除或增加
运行上面的测试例子,成功了,可是提交时候的说测试没有过,不知道哪里出错了!郁闷,挑战失败了,先留着,以后在看看
赶脚在这里用定数组不合适,应该分配动态数组。
- 求AB数
- (百例编程)29.求具有abcd=(ab+cd)平方的性质数
- AB数(from pongo)
- 求(ab+cd)*(ab+cd)=abcd的四位数
- 求数
- 求数
- ab.
- ab
- ab
- ab
- ab
- ab
- ab
- ab
- (if-else语法)求ab中的最大值
- 面试:实现AB两个数的值交换
- 求孪生数(亲和数)
- 三个数求最大数
- 【网络层】
- 金山卫士源代码下载
- 黑马程序员 集合框架 总结
- 推荐系统开源软件列表汇总和点评
- Leetcode: Symmetric Tree
- 求AB数
- java 汉字转拼音
- 一道有关hash的POJ题目:POJ1200 Crazy Search
- iOS 中由数组 NSArray 与 NSMutableArray 的使用理解偏差引发的多宗血案
- 11.25笔记
- 12、UIView-OC+UI
- 2012西电攻防溢出第三题题解
- Drawable 转换Bitmap
- makefile $@ $^ $%