算法笔记第三章练习题_A+B和C,部分A+B,程序运行时间,划拳
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了算法笔记第三章练习题_A+B和C,部分A+B,程序运行时间,划拳,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4603字,纯文字阅读大概需要7分钟。
内容图文
部分A+B问题描述:
正整数 A 的“D?A??(为 1 位整数)部分”定义为由 A 中所有 D?A?? 组成的新整数 P?A??。例如:给定 A=3862767,D?A??=6,则 A 的“6 部分”P?A?? 是 66,因为 A 中有 2 个 6。
现给定 A、D?A??、B、D?B??,请编写程序计算 P?A??+P?B??。
输入格式:
输入在一行中依次给出 A、D?A??、B、D?B??,中间以空格分隔,其中 0<A,B<10?10??。
输出格式:
在一行中输出 P?A??+P?B?? 的值。
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
思路:
枚举PA的每一位,如果与DA相同,就执行 PA = PA * 10 +DA。PB同理可得,最后输出PA+PB。
为了简化代码定义一个函数getP()。注意题目的范围是1010,所以用long long定义A和B。
#include <cstdio>
int main()
{
long long a,b,da,bd;
scanf("%lld%lld%lld%lld",&a,&b,&da,&bd);
long long pa = 0,pb = 0;
while (a%10 == da) //枚举a的每一位,%10的意思是每次取最低位
{
pa = pa * 10 +da; //如果当前位为da,给pa增加一位pa
a = a/10; // /10的意思是每次取前(n-1)位
}
while (b%10 == bd)
{
bd = bd*10+bd;
b = b /10;
}
printf("%lld\n",pa+pb);
return 0;
}
程序运行时间题目描述:
要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick,即“时钟打点”。同时还有一个常数 CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数 f 的运行时间,我们只要在调用 f 之前先调用 clock(),获得一个时钟打点数 C1;在 f 执行完成后再调用 clock(),获得另一个时钟打点数 C2;两次获得的时钟打点数之差 (C2-C1) 就是 f 运行所消耗的时钟打点数,再除以常数 CLK_TCK,就得到了以秒为单位的运行时间。
这里不妨简单假设常数 CLK_TCK 为 100。现给定被测函数前后两次获得的时钟打点数,请你给出被测函数运行的时间。
输入格式:
输入在一行中顺序给出 2 个整数 C1 和 C2。注意两次获得的时钟打点数肯定不相同,即 C1 < C2,并且取值在 [0,10?7??]。
输出格式:
在一行中输出被测函数运行的时间。运行时间必须按照 hh:mm:ss(即2位的 时:分:秒)格式输出;不足 1 秒的时间四舍五入到秒。
输入样例:
123 4577973
输出样例:
12:42:59
思路:
这题目的是模拟clock()函数,给出两个数c1,c2(机器打点数),然后c2-c1计算出相差的打点数,由于1s内打点100次(CLK_TCK = 100),差值换算成s就是(c2-c1)/CLK_TCK。
# include <cstdio>
int main()
{
int c1,c2;
scanf("%d%d",&c1,&c2);
int ans = c2 - c1; //按题目要求作差
if(ans %100 >=50) //四舍五入操作
{
ans = ans/100+1;
}
else
{
ans = ans/100;
}
printf("%02d:%02d:02d\n",ans /3600,ans % 3600/60,ans%60);
return 0;
}
/*
给出起始时间C1和终止时间C2,单位均为CLK_TCK(1s = 200CLK_TCK),求出C1 C2相聚时间,其结果按四舍五入精确到S
其中当C2 -C1的末两位不少于50时,说明C2 -C1需要进位
划拳题目描述:
酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。
下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。
输入格式:
输入第一行先给出一个正整数 N(≤100),随后 N 行,每行给出一轮划拳的记录,格式为:
甲喊 甲划 乙喊 乙划
其中喊
是喊出的数字,划
是划出的数字,均为不超过 100 的正整数(两只手一起划)。
输出格式:
在一行中先后输出甲、乙两人喝酒的杯数,其间以一个空格分隔。
输入样例:
5
8 10 9 12
5 10 5 10
3 8 5 12
12 18 1 13
4 16 12 15
输出样例:
1 2
思路:
甲赢:a2=a1+b1 且 b2≠a1+b1 乙赢:a2≠a1+b1 且 b2=a1+b1
# include <cstdio>
int main()
{
int n,failA = 0,failB = 0; //甲乙输的次数
scanf("%d",&n); //记录条数
for ( int i = 0;i < n;i++)
{
int a1,a2,b1,b2;
scanf("%d%d%d%d",&a1,&a2,&b1,&b2); //甲喊甲划乙喊乙划
if(a1 + b1 ==a2 &&a1 + b1!= b2) //甲猜中乙没有猜中
{
failB++;
}
else if (a1 + b1 ==b2 &&a1 + b1!=a2)
{
failA++;
}
}
printf("%d %d\n",failA,failB); //输出结果
}
/*
注
设计一个全局变量 failA 和failB来记录甲乙输的次数
判断条件中要注意甲乙两人都猜中的情况
A+B和C
给定区间 [?2?31??,2?31??] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。
输入格式:
输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。
输出格式:
对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。
输入样例:
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出样例:
Case #1: false
Case #2: true
Case #3: true
Case #4: false
# include <cstdio>
int main()
{
int T,tcase = 1;
scanf("%d",&T); //输入数据组数
while(T--) //循环T次
{
long long a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
if(a + b > c)
{
printf("Case#%d:true\n",tcase++);
}
else
{
printf("case#%d:false\n",tcase++);
}
}
return 0;
}
/*
注:最大值超过int 型所以变量的数据类型为longlong型,输入输出类型也是%lld
while (T--)循环的是T次 而--T循环的是T-1次
内容总结
以上是互联网集市为您收集整理的算法笔记第三章练习题_A+B和C,部分A+B,程序运行时间,划拳全部内容,希望文章能够帮你解决算法笔记第三章练习题_A+B和C,部分A+B,程序运行时间,划拳所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。