针对计算滚动一定数量的方式的数量和滚动计算法这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展@Kener-林峰markLine数量超过一定数量的时候effect效果动画不显示?、Androi
针对计算滚动一定数量的方式的数量和滚动计算法这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展@Kener-林峰 markLine 数量超过一定数量的时候effect效果动画不显示?、Android-如何只允许一定数量的小数位、bash – 如何将字符串的每个字母移动一定数量的字母?、c – 计算给定更改金额的方式的数量等相关知识,希望可以帮助到你。
本文目录一览:- 计算滚动一定数量的方式的数量(滚动计算法)
- @Kener-林峰 markLine 数量超过一定数量的时候effect效果动画不显示?
- Android-如何只允许一定数量的小数位
- bash – 如何将字符串的每个字母移动一定数量的字母?
- c – 计算给定更改金额的方式的数量
计算滚动一定数量的方式的数量(滚动计算法)
我是一名高中计算机科学系的学生,今天遇到一个问题:
程序说明:掷骰子的人相信,掷三个骰子,十个比掷九个更容易。您可以编写一个证明或否定这一信念的程序吗?
让计算机计算所有可能的投掷三个骰子的方法:1 + 1 + 1,1 + 1 + 2,1 + 1 +
3,依此类推。将这些可能性中的每一个相加,然后看看有多少会给出九个有多少给十。如果多给十,那么信念就会得到证明。
我很快想出了一种蛮力解决方案
int sum,tens,nines;
tens=nines=0;
for(int i=1;i<=6;i++){
for(int j=1;j<=6;j++){
for(int k=1;k<=6;k++){
sum=i+j+k;
//Ternary operators are fun!
tens+=((sum==10)?1:0);
nines+=((sum==9)?1:0);
}
}
}
System.out.println("There are "+tens+" ways to roll a 10");
System.out.println("There are "+nines+" ways to roll a 9");
哪种方法很好用,而暴力破解解决方案是老师想要我们做的。但是,它不适合,我试图找到一种方法,使算法可以计算的方式来卷数 Ñ
骰子得到一个具体的数字。因此,我开始生成获取具有 n个
骰子的每个和的方法的数量。对于1个模具,显然每个模具都有1个解决方案。然后,我通过蛮力计算了2个和3个骰子的组合。这些是针对两个的:
有1种滚动方式2
有2种滚动方式3
有3种滚动方式4
有4种滚动方式5
有5种滚动方式6
有6种滚动方式7
有5种滚动方式8 8
种滚动方式9
一种3种滚动方式10
一种2种滚动方式11
一种1种滚动方式12
看起来很简单;可以使用简单的线性绝对值函数进行计算。但是,事情开始变得棘手。与3:
有1种滚动方式3
有3种滚动方式4
有6种滚动方式5
有10种滚动方式6
有15种滚动方式7
有21种滚动方式8
有25种滚动方式9
有27种滚动方式10
有27种滚动方式11
有25种滚动方式12
有21种滚动方式13
有15种滚动方式14
有10种方式滚动15滚动
6有6种
方法滚动17滚动有3种
方法滚动18滚动有1种方法
所以我看了一下,我想:很酷的三角数!但是,然后我注意到那些讨厌的25和27。因此,显然它不是三角数,而是一些多项式展开式,因为它是对称的。
因此,我进入了Google,我在此页面上找到了有关如何使用数学方法进行此操作的详细信息。使用重复的导数或扩展来找到它是很容易的(尽管很长),但是对我来说很难编程。我不太了解第二和第三个答案,因为我以前从未在数学学习中遇到过这种记号或那些概念。有人可以请我解释一下如何编写程序来执行此操作,或者请解释该页面上给出的解决方案,以使我对组合技术有所了解。
编辑:我正在寻找一种数学方法来解决此问题,它提供了一个准确的理论数字,而不是通过模拟骰子
@Kener-林峰 markLine 数量超过一定数量的时候effect效果动画不显示?
echarts map应用,在markLine 数量超过一定数量的时候effect效果动画不显示?
初步测试了一下 大约markLine + markPoint > 930的时候 effect动画效果不显示, 像一个静态图。
Android-如何只允许一定数量的小数位
您是否知道确保用户只能输入最大小数位数的数字的任何方法。我不确定如何解决这个问题。在MS
SQL数据库中,我将从应用程序中发送数据,我得到了具有这种类型的列。decimal(8,3)
现在考虑最终要存储要在Android中验证的值的列的数据类型,我已经考虑了这些两种情况:
- 如果用户输入不带小数的数字,则最大位数必须为8
- 如果用户输入带小数的数字,则最大位数必须为8(包括小数点右边的数字)
现在,我可以确定第一种情况,而对于第二种情况则不是那么确定。 保持最大位数固定(例如,始终为8)是否正确?
还是我应该考虑允许小数点左边最多8位,小数点右边最多3位?
无论哪种方式,这都是我在Android中一直尝试的方法:
mQuantityEditText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
String str = mQuantityEditText.getText().toString();
DecimalFormat format = (DecimalFormat) DecimalFormat
.getInstance();
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
char sep = symbols.getDecimalSeparator();
int indexOFdec = str.indexOf(sep);
if (indexOFdec >= 0) {
if (str.substring(indexOFdec,str.length() - 1).length() > 3) {
s.replace(0,s.length(),str.substring(0,str.length() - 1));
}
}
}
@Override
public void beforeTextChanged(CharSequence s,int start,int count,int after) {
}
@Override
public void onTextChanged(CharSequence s,int before,int count) {
}
});
即使上面的代码处理最大的小数位数。它不限制EditText中允许的总位数。
您是否认为可以帮助我改善代码,使其同时处理最大小数位数和EditText中允许的总位数(考虑小数点左侧和右侧的两个数字)
编辑
好吧,现在我正在尝试JoãoSousa的建议,这是我已经尝试的方法:
1)我定义了一个实现InputFilter的类
public class NumberInputFilter implements InputFilter {
private Pattern mPattern;
public NumberInputFilter(int precision,int scale) {
String pattern="^\\-?(\\d{0," + (precision-scale) + "}|\\d{0," + (precision-scale) + "}\\.\\d{0," + scale + "})$";
this.mPattern=Pattern.compile(pattern);
}
@Override
public CharSequence filter(CharSequence source,int end,Spanned destination,int destinationStart,int destinationEnd) {
if (end > start) {
// adding: filter
// build the resulting text
String destinationString = destination.toString();
String resultingTxt = destinationString.substring(0,destinationStart) + source.subSequence(start,end) + destinationString.substring(destinationEnd);
// return null to accept the input or empty to reject it
return resultingTxt.matches(this.mPattern.toString()) ? null : "";
}
// removing: always accept
return null;
}
}
2)尝试使用这样的类:
mQuantityEditText.setFilters(new InputFilter[] { new NumberInputFilter(8,3)} );
bash – 如何将字符串的每个字母移动一定数量的字母?
pax$echo 'hello there' | tr '[a-z]' '[n-za-m]' uryyb gurer pax$echo 'hello there' | tr '[a-z]' '[n-za-m]' | tr '[a-z]' '[n-za-m]' hello there
对于要提供任意旋转(0到26)的更通用的解决方案,您可以使用:
#!/usr/bin/bash dual=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz phrase='hello there' rotat=13 newphrase=$(echo $phrase | tr "${dual:0:26}" "${dual:${rotat}:26}") echo ${newphrase}
c – 计算给定更改金额的方式的数量
假设美元的面额分别为100美元,50美元,20美元,10美元,5美元,1美元,0.25美元,0.10美元,0.05美元和0.01美元.下面的函数,适用于int amount和int denominations
/* Count number of ways of making different combination */ int Count_Num_Ways(double amt,int numDenom,double S[]){ cout << amt << endl; //getchar(); /* combination leads to the amount */ if(amt == 0.00) return 1; /* No combination can lead to negative sum*/ if(amt < 0.00) return 0; /* All denominations have been exhausted and we have not reached the required sum */ if(numDenom < 0 && amt >= 0.00) return 0; /* either we pick this denomination,this causes a reduction of picked denomination from the sum for further subproblem,or we choose to not pick this denomination and try a different denomination */ return Count_Num_Ways(amt,numDenom - 1,S) + Count_Num_Ways(amt - S[numDenom],numDenom,S); }
但是当我将逻辑从int更改为float时,它会进入无限循环.我怀疑这是因为代码中的浮点比较.我无法弄清楚无限循环行为的确切原因.
在这方面的任何帮助都会有所帮助.
解决方法
所以只需改变你的公式,使用美分而不是美元,并继续使用整数.然后,当你需要显示金额时,只需将它们除以100即可获得美元和模数100来获得美分.
关于计算滚动一定数量的方式的数量和滚动计算法的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于@Kener-林峰 markLine 数量超过一定数量的时候effect效果动画不显示?、Android-如何只允许一定数量的小数位、bash – 如何将字符串的每个字母移动一定数量的字母?、c – 计算给定更改金额的方式的数量等相关内容,可以在本站寻找。
本文标签: