OSPF实验-HCIA-rj
2026/1/17 14:30:16
短视频软件代码,改进for循环时间复杂度的一种办法
找到n个数中 有几对 两个数之和为7的倍数
//(相比两层for循环时间复杂度仅为O(N)的改进算法)#include<iostream>#include<algorithm>#include<string>#include<string.h>#include<cstdio>#include<queue>#include<stack>#include<set>#include<map>#include<vector>usingnamespacestd;intmain(){intn;//要输入n个数来找和为7的数的数对scanf("%d",&n);longlongnum[20];//定义一个数组去存%7取余后余数为i的个数,20是随意定的,>=7就行,因为任何数对7取余都小于7for(inti=0;i<20;i++){num[i]=0;//初始化一下,%7余数为i的个数都是0}for(inti=1;i<=n;i++){intx;//输入n个数scanf("%d",&x);num[x%7]++;//记录余数为某个数i的个数,更新对应的num[i]的值来记录}longlongsum=0;sum+=(num[0]*(num[0]-1)/2);//对7取余为0的比较特殊(因为14+14,7+7等满足条件但却不是一对数(应为不等的一对数))//故满足条件的数是7,14,21等排列组合得到的个数为n*(n-1)/2sum+=(num[1]*num[6]);//对7取余为1的个数与对7取余为6的个数相乘得到 1和6 总对数(对7取余为1的数与对7取余为6的数相加肯定是7的倍数)sum+=(num[2]*num[5]);//同理sum+=(num[3]*num[4]);//同理printf("%lld\n",sum);return0;}以上就是短视频软件代码,改进for循环时间复杂度的一种办法, 更多内容欢迎关注之后的文章