2道acm简单题(2013):1.(时分秒)时间相减;2.主持人和N-1个人玩游戏,每个人说出自己认识的人数,判断其中是否有人说谎。
/*1、题目:输入一个数,代表要检测的例子的个数,每个例子中:输入两个时间(格式HH:MM : SS),前面时间减去后面时间,输出在时钟上显示的时间,格式一样,如果是以为数字的前面补零。
*/
/*
*思路:1.将两个时间都转换秒,进行相减,得到的结果再转化为时分秒形式;
*2.先进行秒的相减,如果不够减,向分借1,接着进行分的减,如果不够减,向时借1,最后得出相减后一个时分秒的结果。
*/
//解1:
#include<stdio.h>
int main()
{
int test;//代表要检测的例子的个数
int HH1, MM1, SS1;//前一个时间
int HH2, MM2, SS2;//后一个时间
int total1, total2;
int result_total,result_h,result_m,result_s;
while (~scanf("%d",&test))
{
while (test--)
{
result_total = 0;
total1 = 0;
total2 = 0;
result_h = 0;
result_m = 0;
result_s = 0;
scanf("%d:%d:%d", &HH1, &MM1, &SS1);
scanf("%d:%d:%d", &HH2, &MM2, &SS2);
total1 = HH1 * 3600 + MM1 * 60 + SS1;
total2 = HH2 * 3600 + MM2 * 60 + SS2;
result_total = total1 - total2;
result_h = result_total / 3600;
result_total -= result_h*3600;//减去小时以后剩下的秒数
result_m = result_total / 60;
result_total -= result_m * 60;//减去分钟以后剩下的秒数
result_s = result_total;
printf("%02d:%02d:%02d\n", result_h, result_m, result_s);
}
}
return 0;
}
//解2
#include<stdio.h>
int main()
{
int test;//代表要检测的例子的个数
int HH1, MM1, SS1;//前一个时间
int HH2, MM2, SS2;//后一个时间
int result_h, result_m, result_s;
while (~scanf("%d", &test))
{
while (test--)
{
result_h = 0;
result_m = 0;
result_s = 0;
scanf("%d:%d:%d", &HH1, &MM1, &SS1);
scanf("%d:%d:%d", &HH2, &MM2, &SS2);
if (SS1<SS2)//如果前一个时间的秒数不够减,则想分钟借1
{
MM1--;
SS1 += 60;
}
result_s = SS1 - SS2;
if (MM1<MM2)
{
HH1--;
MM1 += 60;
}
result_m = MM1 - MM2;
if (HH2 > 12)
{
HH2 %= 12;
}
if (HH1<HH2)
{
HH1 += 12;
}
result_h = HH1 - HH2;
//%02d的意思就是说整数不够2列就补上0
printf("%02d:%02d:%02d\n", result_h, result_m, result_s);
}
}
return 0;
}
/*
2、题目:一个活动有N(1<N<100)个人参加,一个主持人和N-1个普通参加者,其中所有的人都认识主持人,主持人也认识所有的人,主持人要求N-1个参加者说出他们在参加者中所认识的人数,如果A认识B,则B认识A,所以最少是会认识一个人,就是主持人,他们说出了自己所认识的人数后,需要判断他们中有没有人说谎。
输入:
第一行是N,N = 0表示结束
第二行是N - 1个数字
输出:
Lie absolutely 或者 Maybe truth
7
1 2 4 5 5 3
9
3 7 7 7 7 5 6 6
两个测试例子中第一个是Lie absolutely,第二个是Maybe truth
*/
/*思路:一共有N个人,除去主持人共有N-1个人,这N-1个人都说了自己认识的人数(至少为1,因为每个人都认识主持人),认识都是相互的,A认识B,则B也认识A,N-1个人按照所认识的人数从高到低排序;
比如输入N个数,再输入N-1个数
9
3 7 7 7 7 5 6 6
先把这8(N-1)个数从高到低排序,7 7 7 7 6 6 5 3,第一个人说认识7个人,除了主持人以外还认识6个人,就当作是靠近他的后面6个人,除去第一个人,那么后面的人所说的认识的人数需要减去1,
变为7 6 6 6 5 5 4 3 ,再次排序变为7 6 6 6 5 5 4 3;(注意:排序的话只要将出第一个人以外的重新排序就好,因为第一个没有改变数值,其余的都可能改变了)
第二个人说认识6个人,除了主持人以外还认识5个人,就当作是靠近他的后面5个人,除去第二个人,那么后面的人所说的认识的人数需要减去1,
变为7 6 5 5 4 4 3 3,再次排序变为7 6 5 5 4 4 3 3;
第三个人说认识5个人,除了主持人以外还认识4个人,就当作是靠近他的后面4个人,除去第三个人,那么后面的人所说的人数需要减去1,
变为7 6 5 4 3 3 2 3,再次排序变为7 6 5 4 3 3 3 2;
第四个人说认识4个人,除了主持人以外还认识3个人,就当作是靠近他的后面的3个人,除去第四个人,那么后面的人所说的人数需要减去1,
变为7 6 5 4 2 2 2 2,再次排序变为7 6 5 4 2 2 2 2;
第五个人说认识2个人,除了主持人以外还认识1个人,就当作是靠近他的后面的1个人所说的人数减1,
变为7 6 5 4 2 1 2 2,再次排序变为7 6 5 4 2 2 2 1;
第六个人说认识2个人,除了主持人以外还认识1个人,就当作是靠近他的后面的1个人所说的人数减1,
变为7 6 5 4 2 2 1 1,再次排序变为7 6 5 4 2 2 1 1;
第七个人说认识1个人,说明他只认识主持人;
第八个人说认识1个人,说明他只认识主持人。
*/
#include <stdio.h>
#include <stdlib.h>
//const void *a这是定义了一个指针a,a可以指向任意类型的值,但它指向的值必须是常量。在这种情况下,我们不能修改被指向的对象,但可以使指针指向其他对象。
int cmp(const void *a, const void *b)
{
//(int *)是强行转换
//*(int *)是强行转换后去指针指向变量的值
return *(int *)b - *(int *)a;
}
int main(void)
{
int i, j, n, a[100];
while (scanf("%d", &n) != EOF && n)
{
for (i = 0; i < n - 1; ++i)
scanf("%d", &a[i]);
for (i = 0; i < n - 1; ++i)
{
//查资料可知:qsort是C语言的,sort是C++ STL库的成员函数,一般情况下,sort的效率高于qsort
qsort(a + i, (n - i - 1), sizeof(int), cmp);
//最后一个数是最小的可以为1,但是不能为0,因为他肯定认识主持人,为0就是这些人中有人说谎了
if (0 == a[n - 2])
{
printf("Lie absolutely\n");
break;
}
//如果排序后,当前认识的人和其后面的人数都是1了,那一个人都是主持人,也是Maybe truth
else if (1 == a[i])
{
//当前的人是1,且最后一个也是1,当前到最后的中间的人都是1,则证明是对的
//下面的if判断语句画蛇添足了,因为上面一个if已经判断过最后一个数是不是0了,其不是0的话肯定就是大于等于1的整数,所以如果当前这个不是0是1,那么最后一个也不是0必须是1,中间的也不是0,肯定是1,所以就是对的
//if (i == n - 2)
//{
printf("Maybe truth \n");
break;
//}
}
else
{
//此人认识其后的a[i]个人
for (j = 1; j < a[i]; ++j)
--a[i + j];
}
}
}
return 0;
}
参考博客:http://blog.csdn.net/hackbuteer1/article/details/6678851
2道acm简单题(2013):1.(时分秒)时间相减;2.主持人和N-1个人玩游戏,每个人说出自己认识的人数,判断其中是否有人说谎。的更多相关文章
- 2道acm简单题(2010):1.猜数字游戏;2.字符串提取数字并求和;
//第一题是猜数字的游戏.//题目:随即产生一个3位的正整数,让你进行猜数字,//如果猜小了,输出:"猜小了,请继续".//如果猜大了,输出:"猜大了,请继续" ...
- 3道acm简单题(2011):1.判断是否能组成三角形;2.判断打鱼还是晒网;3.判断丑数。
//1.输入三个正整数A.B.C,判断这三个数能不能构成一个三角形.//思路:最小的两边之和是否是大于第三边#include<iostream>#include<algorithm& ...
- 2道acm编程题(2014):1.编写一个浏览器输入输出(hdu acm1088);2.encoding(hdu1020)
//1088(参考博客:http://blog.csdn.net/libin56842/article/details/8950688)//1.编写一个浏览器输入输出(hdu acm1088)://思 ...
- mybatis存入数据库后没有时分秒时间不全只有年月日
对于Ibatis操作Date/Time/DateTime,总结如下: 将pojo的属性类型设置为java.sql.Date(或java.sql.Time, java.sql.Timestamp),此时 ...
- Oracle 时间相减得出毫秒、秒、分、时、天,,【转】
http://blog.csdn.net/redarmy_chen/article/details/7351410 oracle 两个时间相减默认的是天数 oracle 两个时间相减默认的是天数*24 ...
- highcharts中的x轴如何显示时分秒时间格式
上一篇文章写道:三分钟上手Highcharts简易甘特图:https://www.jianshu.com/p/d669d451711b,在官方文档里面,x轴默认为年月日. 在项目需求中,x轴要表示24 ...
- C# 两个时间相减 计算两个时间差(年月日时分秒)
DateTime dt1; DateTime dt2; int days=(dt2.Date-dt1.Date).Days; 或者 TimeSpan ts = dt2 -dt1; ...
- acm刷题序列
POJ推荐50题 著名的北邮acm训练队推荐50题 https://blog.csdn.net/bat67/article/details/71735012 都是poj上的题 1000:会教会你如何使 ...
- acm.njupt 1001-1026 简单题
点击可展开上面目录 Acm.njupt 1001-1026简单题 第一页许多是简单题,每题拿出来说说,没有必要,也说不了什么. 直接贴上AC的代码.初学者一题题做,看看别人的AC代码,寻找自己的问题. ...
随机推荐
- 1_mysql_认识
什么是数据库? -- 数据 -- 处理+存储 信息 -- 数据库 -- 存取数据 软件 本质是对文件系统的上层封装,通过软件去管理文件,管理数 ...
- HTML学习(一)
文本输出/超链接 <!--/* * @<h1></h1>到<h6></h6>六个h标签,分别表示不同大小的字体.h1最大,h6最小 * @< ...
- WPF笔记(2.4 Grid)
第一章已经简单介绍过这个容器,这一节详细介绍.Grid一般是用表格(Grid.Row 和Grid.Column )的,比StackPanel更细致一些,但是,这么玩很麻烦,先横着竖着定义一大堆,然后把 ...
- Matlab产生TestBeach所需要的波形数据
在用vivado仿真的时候,很多情况下需要自己产生波形来代替AD采样波形.以前的做法都是用DDS内部产生所需要的波形来模仿外部输入,后来发现这种做法不仅麻烦,而且不易修改,对仿真很不友好.于是改用ma ...
- 【转载】Linux时间相关结构与函数
1 时间的获取 在程序当中, 我们经常要输出系统当前的时间,比如日志文件中的每一个事件都要记录其产生时间.在 C 语言中获取当前时间的方法有以下几种,它们所获得的时间精度从秒级到纳秒,各有所不同. 表 ...
- WPF中获取系统本身自带的控件模板(XAML)
每个控件都有自己默认的模板,这是MS本身就编写好的,如果我们能够得到这些模板的XAML代码,那么它将是学习模板的最好的示例,要想获得某个控件ctrl的默认模板,请调用以下方法: string GetT ...
- 使用localhost可以访问,但使用本地ip+端口号无法访问
今天想使用ip访问本机的iview-admin项目,结果怎么配置都无法访问,根据iview工程执行的命令npm run dev了解到是webpack配置的问题,打开工程里的node_modules文件 ...
- MySQL笔记-语句的执行顺序
在一次查询线上问题时发现有以下两条同样的SQL,执行后数据的顺序不一样: SELECT * FROM nns_assists_item AS asset WHERE asset.nns_assist_ ...
- JMeter生成HTML性能报告
有时候我们写性能报告的时候需要一些性能分布图,JMeter是可以生成HTML性能报告的 一.准备工作 1:jmeter3.0版本之后开始支持动态生成测试报表 2:jdk版本1.7以上 3:需要jmx脚 ...
- MIB Browser如何导入已编译的mib
开发过程中,如果需要来回在几套mib之间来回切换,每次都进行编译工作那将是一件很繁琐的事情,我们可以直接导入已经编译好的mib文件,避免重复的编译工作. 第一步,备份已经编译好的mib文件. 将 ...