- 7-1 输出华氏-摄氏温度转换表 思路:
输入温度的下限和上限
判断是否符合条件
如果不符合,则直接输出"Invalid."
如果符合,则按温度从低到高,每两个华氏度为一个步长,计算摄氏度,并输出 - 7-2 统计学生平均成绩与及格人数 思路:
用一个整型数组保存学生成绩。数组长度适当地大一点儿,避免不够用。
按要求,依次输入人数、成绩。先计算总和,再计算平均成绩与统计及格人数。输出。
注意:输入人数后,需要判断人数是否为0,如果为0,则直接输出平均成绩与人数都是0;如果人数不为0,才进行相应计算。
计算平均成绩时,注意数据类型问题。 - 7-3 水仙花数
这个题的想法似乎很简单,输入N,按公式依次找出N位数中所有的水仙花数即可。但是,如果按这个思路来走,往往超时。
特别是当N=7时,计算7个数的7次方,并相加起来,运算量很大。
另外,好多同学用pow()函数来求幂,其实在这种情况下是不可取的。因为pow()函数的结果值是double型的,并不精确,可能会影响判断。
这时需要换一种思路。用空间换时间,即提前把各个数字的N次方算出来,存放至数组中,在找水仙花数的时候就不用再进行大量的计算了。
比如,用int p[10];这个数组依次存放0-9这十个数的N次方,提前就算好后,保存进去。
然后,再对所有的N位数,进行水仙花数的判断,就可大大减少运算量。
参考算法:
1、输入N。
2、计算N位数的最小值start和最大值end,比如,当N=4时,start是1000,end是9999。
3、计算并填充数组p。
4、将start至end之间的所有数m拿来算一遍,看m的每位数字的N次方之和是否等于m,此时会利用到数组p。如果是则输出。 - 7-4 找出不是两个数组共有的元素
假设两个数组分别为a和b。再引入一个过渡的数组c。
编写函数minu(int a[], int b[], int c[]),实现如下功能:
1、对于a中的每一个元素x,都要判断一下它是否在b中出现过。
2、如果x在b中出现过,则处理完毕,再接着处理a中的下一个元素。
3、如果x未在b中出现过,则将x加入数组c中,在加入时要保证c中当前元素不包含x,否则就不再加入x。
然后依次调用minu函数两次:
minu(a, b, c);
minu(b, a, c);
之后,c中元素即为所要找的不是两个数组共有的元素。输出c即可。
注意:1、a、b、c数组中当前有效元素个数。
2、如何判断一个数组中是否包含某个元素。 - 7-5 字符串转换成十进制整数
定义保存计算结果的变量r,并初始化为0。
首先将字符串读入,以'#'结束。
将字符串的每一个字符,执行以下操作:
1)如果是第一个字符,要判断一下是否是'-',如果是,则表示这是一个负数,要记录下来 。
2)对于每一个字符,判断是否在‘0’-‘9’、‘a'-'f'、'A'-'F'的范围之内,如果不在 此范围内,就略去不操作。否则,就将该字符对应的十进制数x算出来,并累加到r内。即r = r * 16 + x;
计算结束后,如果是负数,就将r取乘以-1,输出r。 - 7-6 说反话-加强版
用到一个函数strtok(),可以简化操作。
strtok的作用,大家可以查一下,大致是将一个字符串用某种分隔符隔成一系列的子串。
思路:
定义一个字符串str和一个字符串数组res。
将最初的一句英文读入str中。
通过strtok将str中的内容解析为一系列的单词,并依次存入res中。
再将res中的元素依次逆序输出。即先输出最后一个元素,再输出倒数第二个元素,直到第一 个元素。
注意:单词间用一个空格分隔。即最后输出的一个单词后面不再有空格。 - 7-7 九宫格输入法
同样用到了strtok函数。
先将按键序列输入后保存在字符串str中。
用strtok将str解析为一系列的按键组合。
对于每一个按键组合,求出其中包含的字符key,计算其字符串长度rep,这个长度代表了同一个键的按键次数。
再根据key和rep决定该按键组合代表的键值。输出。
ACM习题答案java acm例题讲解分析
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
ACM练习题C++版答案记录-Section 2
最近复习C++,拿起ACM从头练,在此做个答案记录,大家不要盲目复制哦,要
ACM 答案记录 #include ci ios