选夫婿1oj

程序选拔赛

选夫婿1

Time Limit: 1000MS Memory Limit: 32768KB
Problem Description
    倾国倾城的大家闺秀潘小姐要选夫婿啦!武林中各门各派,武林外各大户人家,闻讯纷纷前来,强势围观。前来参与竞选的男生藏龙卧虎,高手云集,才子遍布,帅哥纷纭,更不乏富二代,官二代,可谓声势空前。

    每个人参与竞选的帅哥除了进行一段激情洋溢的求婚演讲以外,还要报上自己姓名、身高和体重,以及个人简历。最后再进行文武选拔,最后夺魁者方能得到潘小姐的芳心。

       潘小姐不爱名利,只看人,第一关就是身高和体重要合格,即必须在其要求的范围内,否则直接排除在外,不允许参加下一轮的选拔。

       作为一个程序员,你没有钱也没有权,擅长的也就是编程了。潘小姐也发现了这一点,所以把首轮根据身高体重进行选拔的任务交给了你,如果完成的好,你可以直接进入下一轮选拔,你笑了。

Input

        潘小姐给你了所有报名男生的信息。输入数据的第一行是一个正整数N(0 < N < 1000)。然后N行数据,每行包含三部分,用空格隔开。第一部分是报名者的姓名name(长度小于20的字符串),然后是整数身高h(0 < h < 300),第三部分是整数体重w (0 < w < 200)。

最后一行是四个整数a,b,c,d.表示身高的合格范围是[a,b],体重的合格范围是[c,d](0 < a < b < 200, 0 < c < d < 300)。

 

Output

        你需要把合格的男生信息按照身高从低到高输出,格式跟输入一样,也是每行三个信息,共N行,如果身高相同则按体重从轻到重输出,若没有合格人选则输出No,具体格式见样例。

 

Example Input
8武大郎 70 40西门庆 180 70李逵 160 150燕青 175 69鲁智深 180 100武松 180 75小泉纯一狼 30 20孙二娘 169 60165 190 60 90
Example Output
孙二娘 169 60燕青 175 69西门庆 180 70武松 180 75
Hint
 
Author
tongjiantao
#include<stdio.h>
struct sdut
{
    char name[21];
    int h,w;
}s[1001],t;
int main()
{
    int n,i,a,b,c,d,j,k=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%s%d%d",&s[i].name,&s[i].h,&s[i].w);
    scanf("%d%d%d%d",&a,&b,&c,&d);
    for(i=1;i<=n;i++)
    {
        if(a<=s[i].h&&b>=s[i].h&&c<=s[i].w&&d>=s[i].w)
        {
            k++;
            s[k]=s[i];
        }
    }
    for(i=1;i<=k;i++)
    {
        for(j=1;j<=k-i;j++)
        {
            if(s[j].h>s[j+1].h)
            {
                t=s[j];
                s[j]=s[j+1];
                s[j+1]=t;
            }
            else if(s[j].h==s[j+1].h&&s[j].w>s[j+1].w)
            {
                t=s[j];
                s[j]=s[j+1];
                s[j+1]=t;
            }
        }
    }
    if(k==0)
        printf("No\n");
    else
        for(i=1;i<=k;i++)
            printf("%s %d %d\n",s[i].name,s[i].h,s[i].w);
return 0;
}

### OJ2-1 Java 问题及解决方案 OJ2-1 Java 的具体题目内容可能因平台而异,但通常涉及基础的编程逻辑和算法设计。以下是一个假设性的 OJ2-1 Java 题目及其解决方案。 #### 假设题目描述 给定一个整数数组 `nums` 和一个目标值 `target`,请在数组中找出两个数,使得它们相加的结果等于目标值 `target`。返回这两个数的索引。 **输入:** - 第一行包含一个整数 `n`(表示数组长度)。 - 第二行包含 `n` 个整数(表示数组元素)。 - 第三行包含一个整数 `target`(目标值)。 **输出:** - 输出两个整数,表示满足条件的两个数的索引(从 0 开始)。 --- #### 解决方案 以下是基于上述假设题目的解决方案,使用了哈希表来优化查找效率[^2]。 ```java import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class OJ2_1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 输入数组长度 int n = sc.nextInt(); // 输入数组元素 int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = sc.nextInt(); } // 输入目标值 int target = sc.nextInt(); // 调用方法解决问题 int[] result = twoSum(nums, target); // 输出结果 System.out.println(result[0] + " " + result[1]); } public static int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (map.containsKey(complement)) { return new int[] { map.get(complement), i }; } map.put(nums[i], i); } throw new IllegalArgumentException("No two sum solution"); } } ``` --- #### 代码解析 1. **输入处理**: - 使用 `Scanner` 类读取用户输入,包括数组长度、数组元素以及目标值 `target`。 - 数组长度用于初始化数组大小,确保不会超出内存限制。 2. **核心逻辑**: - 定义一个 `HashMap`,用于存储已经遍历过的数组元素及其索引。 - 对于每个数组元素,计算其补数(`complement = target - nums[i]`),并检查该补数是否已存在于 `HashMap` 中。 - 如果存在,则直接返回当前索引和补数索引。 - 如果不存在,则将当前元素及其索引存入 `HashMap`。 3. **输出结果**: - 返回满足条件的两个数的索引,并通过 `System.out.println` 打印结果。 --- #### 注意事项 - 确保输入数据的有效性,例如数组长度 `n` 是否为正数,数组元素是否为整数等。 - 如果没有找到符合条件的两个数,抛出异常或输出提示信息。 - 使用 `HashMap` 可以将时间复杂度降低到 O(n),相比暴力解法(两层循环)更高效[^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值