• 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;
    }
    
  • 相关阅读:
    怎样才能充分利用SQL索引
    MS SQL存储过程编写经验和优化措施
    ASP調用存講過程總結
    調用外部的DLL(DllImportAttribute)
    MS SQL中的行轉列
    SQL Server乐观锁定和悲观锁定实例
    如何使用 JScript 從 HTML 網頁自動化 Excel
    了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密
    C#語法學習結構(Struct)
    四项技术 助你提高SQL Server的性能
  • 原文地址:https://www.cnblogs.com/zongji/p/12403728.html
Copyright © 2020-2023  润新知