30天编程练习(七)

1029 求特殊整数

题意:给出一个奇数N,再给出一串整数,找出在这串整数中出现次数大于(N+1)/2的整数,即特殊整数

解析:使用快速排序排好之后,取中间位置那个数肯定就是要找的数,因为出现次数一定会满足条件


#include<iostream>  

#include<algorithm>  
using namespace std;  
int arr[999999];  
int cmp(int a,int b)  
{  
    if(a<=b)  
        return 1;  
    else  
        return 0;  
}  
int main()  
{  
    int n,i;  
    while(cin>>n)  
    {  
        for(i=0;i<n;i++)  
            cin>>arr[i];  
        sort(arr,arr+n,cmp);  
        cout<<arr[n/2]<<endl;  
    }  
    return 0;  

}  



1030  数字三角形

题意:如图所示的数字三角形,给出两个数,求二者之间至少多少边

解析:按直线和斜线将其分层,把二者都需要穿过的层数加起来就是总边数



#include <stdio.h>  

#include <math.h>  

void find(int n, int &l, int &r, int &level)  
{  
    int i;  
    level = 1;  
    for (i = 1; ; i += 2)  
    {  
        if (n - i <= 0)  
        {  
            l = (n + 1) / 2;      /*左边层次*/  
            r = (i - n) / 2 + 1;  /*右边层次*/  
            break;  
        }  
        level++;  /*层次*/  
        n -= i;  
    }  
}  
  
int main()  
{  
    int m, n;  
    int ml, mr, nl, nr, mlevel, nlevel;  
    while(scanf("%d%d", &m, &n) != EOF)  
    {  
        find(m, ml, mr, mlevel);  
        find(n, nl, nr, nlevel);  
        printf("%d\n", abs(ml - nl) + abs(mr - nr) + abs(mlevel - nlevel));  
    }  
    return 0;  
}



1031 设计T恤

题意:你要为大家设计一个T恤,大家有很多想要加入的元素,但是你不能加入所有的元素,你要加入K个元素,并使得满意度最大。

解析:核心还是快速排序,找到满意度最大的元素


#include<iostream>
#include<cstdio>
#include<cstring>


int N,M,T,pos;
double sum[1000];

int main(void){
while(~scanf("%d%d%d",&N,&M,&T)){
double temp;
memset(sum,0,sizeof(sum));
while(N--){
for(int i = 0;i<M;++i){
scanf("%lf",&temp);
sum[i] += temp;
}
}
int count = 0;
int max = 0;
while(count<T){
max = sum[0];
pos = 0;
for(int i = 0;i<M;++i){
if(max<sum[i]){
max = sum[i];
pos = i;
}
}
++count;
sum[pos] = -1;
}
for(int i = M-1;i>=0;--i){
if(sum[i] == -1){
--count;
if(count != 0)
printf("%d ",i+1);
else
printf("%d\n",i+1);
}
}
}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值