代码如下
!DOCTYPE html><html><head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=10">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var sum,a,b,c;
sum=100;
while (sum<=999) {
var a=Mathfloor(sum/100);
var b=Mathfloor((sum%100)/10);
var c=Mathfloor(sum%10);
// if(c!=3) {
// if(b!=3) {
// if(a!=3) {
// if(sum%3!=0) {
// alert(sum);
// }
// }
// }
// }
// sum++;
if (a!=3&&b!=3&&c!=3&&sum%3!=0) {
alert(sum);
} sum++;
}
</script>
</body>
</html>
————————————————
版权声明:本文为CSDN博主「尔鑫宇」的原创文章,遵循CC 40 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:>
转换字符的函数也非常繁琐,而且没必要。
#include <stdioh>#include <stringh>
void main(){
int i,n;char a[21];
gets(a);n=strlen(a);
for(i=0;i<n;i++)
if(a[i]>='a'&&a[i]<='z')
a[i]=(a[i]-'a'+4)%26+'a';
else if(a[i]>='A'&&a[i]<='Z')
a[i]=(a[i]-'A'+4)%26+'A';
a[n]='\0';
printf("%s",a);
}
主要思路:因为只有一股可以交易,所以我们可以枚举 必须以i位置作为卖出时机的情况下,得到的最大收益是多少。如果我们得到每个i位置的最大收益,那么最大收益必是所有位置的最大收益的最大值 。
使用两个变量:
min变量:表示遍历到的位置之前的最小值是什么。
max变量:表示当前收集到必须以i位置卖出的最大收益是多少。
遍历数组一遍,在遍历到i位置的时候,min和max的更新逻辑如下:
遍历完数组,返回max的值就是最终答案。完整代码见:
主要思路:由于可以进行任意次的交易,但是任何时候最多只能持有一股股票,所以我们可以把股票曲线的所有 上升段 都抓取到,累加收益就是最大收益。遍历数组,遍历到的位置减去前一个位置的值,如果是正数,就收集,如果是负数,就把本次收益置为0(就等于没有做这次交易),这样遍历一遍数组,就不会错过所有的收益。
设置一个变量max,初始为0,用于收集最大收益值,来到i位置,max更新逻辑如下:
完整代码如下:
由本题可以简单得出一个结论: 如果数组元素个数为N,则最多执行N/2次交易就可以抓取所有的上升段的值(极端情况下,当前时刻买,下一个时刻卖,保持这样的交易一直到最后,执行的交易次数就是N/2) 。
主要思路:
在第2种情况下,我们定义
其中dp[i][j]表示[0i]范围内交易j次获得的最大收益是多少。如果可以把dp这个二维表填好,那么返回dp[N-1][k]的值就是题目要的答案。
dp这个二维矩阵中,
第一行的值表示数组[00]范围内,交易若干次的最大收益,显然,都是0。
第一列的值表示数组[0i]范围内,交易0次获得的最大收益,显然,也都是0。
针对任何一个普遍位置dp[i][j]的值,
我们可以枚举i位置是否参与交易,如果i位置不参与交易,那么dp[i][j] = dp[i-1][j],如果i位置参与交易,那么i位置一定是最后一次的卖出时机。
那最后一次买入的时机,可以是如下情况:
最后一次买入的时机在i位置,那么dp[i][j] = dp[i][j-1] - arr[i] + arr[i]
最后一次买入的时机在i-1位置,那么dp[i][j] = dp[i-1][j-1] - arr[i-1] + arr[i]
最后一次买入的时机在i-2位置,那么dp[i][j] = dp[i-2][j-1] - arr[i-2] + arr[i]
最后一次买入的时机在0位置,那么dp[i][j] = dp[0][j-1] - arr[0] + arr[i]
完整代码如下:
上述代码中包含一个枚举行为
增加了时间复杂度,我们可以优化这个枚举。
我们可以举一个具体的例子来说明如何优化,
比如,
当我们求dp[5][3]这个值,我们可以枚举5位置是否参与交易,假设5位置不参与交易,那么dp[5][3] = dp[4][3],假设5位置参与交易,那么5位置一定是最后一次的卖出时机。那最后一次买入的时机,可以是如下情况:
最后一次买入的时机在5位置,那么dp[5][3] = dp[5][2] - arr[5] + arr[5]
最后一次买入的时机在4位置,那么dp[5][3] = dp[4][2] - arr[4] + arr[5]
最后一次买入的时机在3位置,那么dp[5][3] = dp[3][2] - arr[3] + arr[5]
最后一次买入的时机在2位置,那么dp[5][3] = dp[2][2] - arr[2] + arr[5]
最后一次买入的时机在1位置,那么dp[5][3] = dp[1][2] - arr[1] + arr[5]
最后一次买入的时机在0位置,那么dp[5][3] = dp[0][2] - arr[0] + arr[5]
我们求dp[4][3]这个值,我们可以枚举4位置是否参与交易,假设4位置不参与交易,那么dp[4][3] = dp[3][3],假设4位置参与交易,那么4位置一定是最后一次的卖出时机。那最后一次买入的时机,可以是如下情况:
最后一次买入的时机在4位置,那么dp[4][3] = dp[4][2] - arr[4] + arr[4]
最后一次买入的时机在3位置,那么dp[4][3] = dp[3][2] - arr[3] + arr[4]
最后一次买入的时机在2位置,那么dp[4][3] = dp[2][2] - arr[2] + arr[4]
最后一次买入的时机在1位置,那么dp[4][3] = dp[1][2] - arr[1] + arr[4]
最后一次买入的时机在0位置,那么dp[4][3] = dp[0][2] - arr[0] + arr[4]
比较dp[5][3]和dp[4][3]的依赖关系,可以得到如下结论:
假设在求dp[4][3]的过程中,以下递推式的最大值我们可以得到
dp[4][2] - arr[4]
dp[3][2] - arr[3]
dp[2][2] - arr[2]
dp[1][2] - arr[1]
dp[0][2] - arr[0]
我们把以上式子的最大值定义为best,那么
dp[5][3] = Mathmax(dp[4][3],Mathmax(dp[5][2] - arr[5] + arr[5], best + arr[5]))
所以dp[5][3]可以由dp[4][3]加速得到,
同理,
dp[4][3]可以通过dp[3][3]加速得到,
dp[3][3]可以通过dp[2][3]加速得到,
dp[2][3]可以通过dp[1][3]加速得到,
dp[1][3]可以很简单得出,dp[1][3]有如下几种可能性:
可能性1,1位置完全不参与,则
可能性2,1位置作为最后一次的卖出时机,买入时机是1位置
可能性3,1位置作为最后一次的卖出时机,买入时机是0位置
此时,best的值为
然后通过dp[1][3]加速dp[2][3],通过dp[2][3]加速dp[3][3],所以二维dp的填写方式是按列填,
先填dp[1][0],dp[1][2]一直到dp[1][k],填好第一列;
然后填dp[2][0],dp[2][1]一直到dp[2][k],填好第二列;
依次填好每一列,直到填完第N-1列。
枚举行为被优化,优化枚举后的完整代码如下:
主要思路:上一个问题中,令k=2就是本题的答案。
主要思路:因为有了冷冻期,所以每个位置的状态有如下三种:
定义三个数组,分别表示i位置这三种情况下的最大值是多少
显然有如下结论:
针对一个普遍位置i
最大收益就是如上三种方式的最大值。完整代码见:
由于三个数组有递推关系,所以可以用三个变量替换三个数组,做空间压缩,优化后的代码如下:
主要思路:由于没有冷冻期,所以在i位置的时候,状态只有两种
针对0位置
针对普遍位置i
完整代码如下:
同样的,两个数组都有递推关系,可以做空间压缩,简化后的代码如下:
原文链接:买卖股票的最佳时机系列问题 - Grey Zeng - 博客园
鸡兔同笼python程序编写要根据原书中的描述的:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何”鸡兔同笼python程序具体写法如下:
把原文翻译成现代汉语是:“鸡和兔放在一个笼子里, 笼子里共有35个头,94个爪,那鸡和兔各有多少只?”
1、根据题意,头的总数为35,用变量head来记录头的总数:head =35。而腿的总数为94,用变量foot来记录腿的总数:(foot = 94)。
2、用变量chicken记录鸡的数量。因为头的总数为35,说明鸡和兔共有35只,所以鸡的数量是0-35之间的某一个数,这里用for循环来指挥计算机,自动罗列所有可能出现的情况:(for chicken in range(0, head+1):))。
3、然后,用变量rabbit记录兔子的数量。因为鸡和兔的总数等于头的数量,所以兔的数量rabbit等于头的总数head减去鸡的数量(chicken:rabbit=head一chicken)。
4、鸡有两条腿,兔子有四条腿,所以腿的总数为:(if chicken 2 + rabbit 4 == foot:print('鸡',chicken, '兔',rabbit))执行代码,就完成了。
python程序编写:
Python编程是一种跨平台的计算机程序设计语言,是ABC语言的替代品。Python能提供高效的高级数据结构,还能简单有效地面向对象编程。
是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
以上就是关于满足位数中有3,但不是3的倍数,程序怎么写全部的内容,包括:满足位数中有3,但不是3的倍数,程序怎么写、C语言程序问题、程序员算法实现-买卖股票的最佳时机系列问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)