zoukankan      html  css  js  c++  java
  • PAT 1028 人口普查

    题目:

    某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

    这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。

    思路:通过string对象保存生日并计算出相应生日的ASCII值(计算过程中要对每一个字符的ASCII的值进行按位加权确保唯一性),通过与作为边界的生日的ASCII值对比来筛选出符合条件的

              生日,最后再遍历找出题目所求的答案。

    代码:

    #include<iostream>
    #include<string>
    using namespace std;
    struct familyCensus
    {
    	string name;
    	string birthday;
    	double sum;
    }fc[100000];
    int main()
    {
    	int N = 0;
    	cin >> N;
    	if (N > 100000 || N < 0)return 0;
    	string yearnow = "2014/09/06";
    	string sideyear = "1814/09/06";
    	 double side1 = 0, side2 = 0;//保存题目所给的两个年份的ASCII值
    	for (int i = 0; i < N; i++)
    	{
    		cin >> fc[i].name >> fc[i].birthday;
    		fc[i].sum = 0;
    	}
    	for (int i = 0; i < yearnow.size(); i++)
    	{
    		side1 *= 10;
    		side2 *= 10;
    		side1 =side1+(wchar_t)yearnow[i] - '/';
    		side2 =side2+(wchar_t)sideyear[i] - '/';//计算题目所给的ASCII值,按位进行加权能保证所得的值有唯一性
    	}
    	
    	for (int i = 0; i < N; i++)
    	{
    		for (int j = 0; j < fc[i].birthday.size(); j++)//对所给数据的ASCII值进行加权
    		{
    			fc[i].sum *= 10;
    			fc[i].sum =fc[i].sum+(wchar_t)fc[i].birthday[j] - '/';//会出现算数移除的警告,故进行强制转换
    		}
    		//cout << fc[i].sum << " ";
    	}
    	double max = 0, min = side1;
    	int indexmax = 0, indexmin = 0;
    	int step = 0;
    	for (int j=0;j<N;j++)
    	{
    		if (fc[j].sum>=side2&&fc[j].sum<=side1)
    		{
    			//通过筛选在边界内的出生日期选出年龄最大和最小的年龄的位置
    			if (max < fc[j].sum)
    			{
    				max = fc[j].sum;
    				indexmax = j;
    			}
    			 if (min>fc[j].sum)
    			{
    				min = fc[j].sum;
    				indexmin = j;
    			}
    			 step++;
    		}
    	}
    	if (step == 0)cout << step;//测试点3:一个合适的都没有,输出0;
    	else
    	cout << step<<" "<<fc[indexmin].name << " " << fc[indexmax].name;
    	return 0;
    }
    
  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/zongji/p/12403728.html
Copyright © 2011-2022 走看看