#include
#include
using namespace std;
void Searchz(int arr[],int &z,int &c);
void QuickSort(int a[],int p,int r ) ;
int partition(int a[],int p,int r);
main()
{
int arr[4];
fstream ofile;
ofile.open("D:\\imput.txt",ios::in);
for(int i=0;i<4;i++)
ofile>>arr[i];//从文件中输入
QuickSort(arr,0,3);
fstream oufile;
oufile.open("D:\\output.txt",ios::out);
int z=-1,c=-1;//众数、重数
Searchz(arr,z,c);
oufile<<"众数为:"<" 重数为:"<//输出到文件中
ofile.close();
oufile.close();
}
void Searchz(int arr[],int &z,int &c)
{
int zt=-1,ct=-1;//临时众数、临时重数
for(int i=0;i<4;i++)
{
if(arr[i]!=zt)
{
zt=arr[i];ct=1;
}
else if(arr[i]==zt)ct++;
if(ct>c)//关键代码,比较出真正的重数
{
c=ct;z=zt;//临时赋给真正的
}
}
}
//快速排序
void QuickSort(int a[],int p,int r)
{
if(pint q=partition(a,p,r);
QuickSort(a,p,q-1);
QuickSort(a,q+1,r);
}
}
int partition(int a[],int p,int r)
{
int i=p,j=r+1;
int x=a[p],temp;
while(1)
{
while(a[++i]while(a[--j]>x);
if(i>=j) break;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
a[p]=a[j];
a[j]=x;
return j;
}
如果不用文件输入输出的话,代码可以正常运行,但是用文件输入输出,结果永远都是众数为0重数为2,不知道问题出在哪里
#include <iostream>
#include <algorithm>
using namespace std;
int num=0; //存储众数
int sum=0; //存储重数
int count(int a[],int s,int e){//计算中间数出现的次数
int n=a[(s+e)/2];
int counts=0;
for(int i=s;i<e;i++) {
if(a[i]==n)
counts++;
}
return counts;
}
int start(int a[],int s,int e){ //找到中间数出现的位置
int x=0;
for(in t i=s;i<e;i++) {
if(a[i]==a[(p+q)/2]) {
x=i;
break;
}
}
return x;
}
void mode(int a[],int s,int e){
int tnum=(s+e)/2;
int tsum=count(a,s,e);
int left=start(a,s,e);
if(tsum>sum) {
sum=tsum; num=a[tnum];
}
if(q-(left+tsum)>sum) mode(a,left+tsum,e);
if(left>sum) mode(a,s,left);
}
int main()
{
int a[10]={2,1,3,2,5,2,3,3,3,3};
cout<<mode(a,0,9)<<endl;
return 0;
}
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
unordered_map<int, int> count; // 存储每个数出现的次数
vector<int> nums = {1, 2, 2, 2, 3, 5}; // 给定的多重集合 S
int mode = 0; // 众数
int mode_count = 0; // 众数的重数
for (int num : nums) {
count[num]++; // 统计每个数出现的次数
if (count[num] > mode_count) { // 如果某个数的次数大于当前的众数次数,更新众数和重数
mode = num;
mode_count = count[num];
}
}
cout << "众数是 " << mode << ",重数是 " << mode_count << endl;
return 0;
}
我们知道:原码的表示方法:最高位作为符号位,不表示数据,0为正,1为负。
比如 [+1] = [0000 0001] (原码) [-1] = [1000 0001] (原码)
反码:正数和原码相同,负数:符号位不变,其余数位取反
[+1] = [0000 0001] (反码) [-1] = [1111 1110] (反码)
补码:正数和原码相同,负数:符号位不变,其余数位取反+1
[+1] = [0000 0001] (补码) [-1] = [1111 1111] (补码)
所以到这里,基本出来了,-1对于带符号型(以8位为例)来说用补码表示自然就是 1111 1111
对于不带符号整数来说,最高位不表示符号位,故表示255 这也是unsigned回绕机制的原理。说到底,还是计算机底层表示