已经有很多大佬发布了答题思路,我就简洁点吧
1.小玉家的电费
题目描述
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上 面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400 千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一 下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费 应该是多少
解析
就是个分段函数,设价格分别为a1,a2,a3
0<x<=150,y=a1x
150<x<=400,y=a1150+a2*(x-150)
x>400,y=a1150+a2250+a3*(x-400)
2.单词逆序
题目描述
对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成, 你需要将这些部分逆序。 给定一个原字符串A,请返回逆序后的字符串。例,输入”I am a boy!“输出”boy! a am I“
解析
用支持堆栈的语言先入后出就行了
这个用C++要比C要好,自带容器,
3.小Q整数分割
题目描述
小Q决定把一个整数n,分割为k个整数。 每个整数必须大于等于1。 小Q有多少方案。
解析
类似于有10个白球,现在要把2个红球放到白球中间,有多少种方法
答案就是一个公式C(9,2),题目就是C(n-1,k-1)
4.新型美丽数列
题目描述
定义美丽数列A: 1. 数列中相邻的数越是靠内相对大小加一,a[2]=a[1]+1,a[n-2]=a[n-1]+1… 2. 距离边缘距离相等的 数的大小相等:a[0] = a[n-1],a[1] = a[n-2]… 通过修改最小的数字个数使得给定数列变成美丽数列。 修改后的值必须仍是正 整数。
解析
题目描述不是清晰,求的是要修改数字个数的最小值
美丽数就是 121,2334
所以当长度和当中任意一位的数字确定了,其他数字也就确定了。
暴力破解法
设第一个数不变,计算其它位要修改的个数
再设第二个数不变,计算其它位要修改的个数
返回当中的最小值
优化
设第一个数不变,计算其它位要修改的个数,如果当中有不要变化的数如位置a,下次设置a不变的情况时可以跳过,跟第一个数不变的结果是一样的
最坏情况时间复杂度还是n^2
还有更简洁的,自己拍脑袋想的,感觉是对的
设中间的数固定,计算其它位置的偏差值,统计具有相同偏差值的最大值,这是不需要修改的,总数-最大值就是要修改的结果
如果是偶数,中间两个不一样就要分左右两种情况统计
如 121,偏差值为000,相同的最大值有3个,要修个0个
如 131,偏差值101,相同的最大值有2个,要修个1个
如 123,偏差值00-1,相同的最大值有2个,要修个1个
1223,偏差值000-2,要修个1个
1451,偏差值20-12,3103,不管哪种,相同的最大值有2个,要修个2个