寻找固定的和(C百例)
来源:互联网 发布:知乎马前卒是谁 编辑:程序博客网 时间:2024/05/16 00:59
我优化的想法:将已知的两个数组进行排序,前者从小到大排序,后者从大到小排序。然后遍历第一个数组,针对每一个数字,再在第二个数组中查找,和大了向后找,dex++,找到了就count++且dex++,当a[i]+b[dex]<sum时跳出第二个循环遍历,但是dex不要变回1,继续第一个数组遍历,重复这个过程。
产生输入数据:
#include<cstdio>#include<cmath>#include<iostream>using namespace std;const int maxn=1e4;#define pi 3.1415926 int main(){freopen("cout.txt","w",stdout);cout<<maxn<<" "<<8010<<endl; for(int i=1;i<=3000;i++)printf("%d ",i); for(int i=6000;i<=maxn;i++)printf("%d ",i); for(int i=3001;i<6000;i++)printf("%d ",i); cout<<endl; for(int i=1;i<5000;i++)printf("%d ",int(i*1.5)); for(int i=5000;i<=maxn;i++)printf("%d ",(int)(50*sin(pi/6*i))+i);return 0;}
暴力双循环:
#include <iostream>#include<cstdio> #include<time.h>using namespace std;const int maxn=1e4+5;int a[maxn],b[maxn];int main(int argc, char *argv[]) {freopen("cin.txt","r",stdin);freopen("cout.txt","w",stdout); int n,sum,count;while(cin>>n>>sum){count=0;clock_t start,finish;for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)scanf("%d",&b[i]);start=clock();for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[i]+b[j]==sum){//printf("%d+%d=%d ",a[i],b[j],sum);count++;}}}finish=clock();printf("找到%d个,",count);printf("时间:%.8lf\n",(double)(finish-start)/CLOCKS_PER_SEC);}return 0;}结果:找到8008个,时间:0.61500000
优化:
#include <iostream>#include<cstdio> #include<time.h>#include<algorithm>using namespace std;const int maxn=1e4+5;int a[maxn],b[maxn];bool cmp(int q1,int q2){return q1>q2;}int main(int argc, char *argv[]) {freopen("cin.txt","r",stdin);freopen("cout.txt","w",stdout); int n,sum,count;while(cin>>n>>sum){count=0;clock_t start,finish;for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)scanf("%d",&b[i]);start=clock();int dex=1;sort(a+1,a+1+n); //rise sort(b+1,b+1+n,cmp); //descendfor(int i=1;i<=n;i++){while(a[i]+b[dex]>=sum&&dex<=n){ if(a[i]+b[dex]==sum){ count++; //printf("%d+%d=%d ",a[i],b[dex],sum); 输出也占了不少时间,让1.4s-->0.007 }dex++;}}finish=clock();printf("找到%d个,",count);printf("时间:%.8lf\n",(double)(finish-start)/CLOCKS_PER_SEC);}return 0;}结果:找到8008个,时间:0.00700000
0 0
- 寻找固定的和(C百例)
- 寻找固定的和
- 寻找固定的和----2013年2月26日
- 寻找和固定的两个或三个数
- 连续整数固定和(C百例 & 51nod 1138)
- 连续整数的固定积(C百例)
- 寻找极小值(C百例)
- 2.16 连续整数的固定和 C实现
- 快速寻找数组的子集之和为固定数
- C#寻找素数的算法
- C#寻找素数的算法
- C#寻找素数的算法
- 寻找C/C++的净土!
- 寻找poppopret的c代码
- c语言基于固定块链表的内存池 (转)
- 一种固定内存池的实现(C++)
- 寻找直方图中面积最大的矩形(C语言版)
- 寻找距离某数最近的素数(C语言)
- 6.5-7
- 在构造函数中使用new时应注意的事项
- oracle 11G自动内存管理
- Spark经典视频之《王家林老师DT大数据梦工场》
- 【转】理解矩阵(三)
- 寻找固定的和(C百例)
- 在学习iOS的MRC管理中,遇到的retain引起的循环问题、NSString问题
- 【LintCode】 Reverse Linked List 翻转链表
- Android 平台camera相关梳理
- 编码规范之eclipse设置
- C++语言编程基础1
- 选择排序
- 《DirectX 9.0 3D 游戏开发编程基础》学习笔记#2 D3D初始化
- Union 和 Union All的区别