大家好,我想随机生成一些除法练习题,可以设置好除数的位数(如6位)、被除数的位数(如3位),商要求是不能有余数的,必须整除。
1. 质数只能被1和自身整除,我已经考虑到了。
2. 反着来,设置商和被除数的位数,也考虑过,这不符合要求。
希望大家能给一些可行的建议,或则现有的方案。谢谢,谢谢!
最好是C#,C++都可以试试。谢谢
我建议写个小程序,for循环来做。比如 除数的位数(如6位) 从100001 到 900001 ,被除数的位数(如3位) 100到 999,最后判断商要求是不能有余数的:
for(i=100001;i<900001;i++){
for(j=100;i<999;j++){
k=i%j; 取余数
if(k==0){
保存该算式的 i j k
}
}
最后从所有可用的算式中,随机抽取一些算式
来一个项目的大纲。。完整的程序需要时间去写逻辑。。
int main()
{
1. 输入除数位数(1 - 10)被除数位数(1 - 10);
2. 随机生成被除数(A) 随机生产倍数(B) 产生 A * B = (除数)C
3.输出数据 C / A = ?
4. 输入数据并判断数据的正确。。
5.计算答题的得分等情况
return 0;
}
首先定义变量除数位数cNum被除数位数bcNum
再定义总题数count,已生成题数getCount
写一个for循环,定义局部变量i为0 i小于count,且getCount小于等于count
在大的for循环里面写第一个小的for循环,用random每次生成一个10以内的随机数,转成字符串想加到cNum次,得到除数a,被除数的话再接着一个for循环,同得到除数方法一样,得到b。
然后进行模运算,a%b==0以这个为条件,复合条件的getCount加1,将除数和被除数中间用除号连接。如果有需要也可以用集合去存起来一样的。纯手机打的,不会的话在问我。
大致理了一下思路:
1.以给出的除数位数,生成除数
2.以给出的被除数位数,生成被除数
3.两者进行除法运算
4.假设需要的整除组合 50对,那么进行一定数量的循环,直到达到50对此数字或者,循环结束为止。
5.最后得到所需的整出组合。
JAVA代码如下。。 C语言应该也能直接就翻译过去吧。。
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class TestCase {
private static Set<String> set = new HashSet<String>();
private static Random r = new Random();
/**
* 对数字进行运算,将符合要求的组合,存入set集合中
*/
public static void CPNumber(long s, long z) {
StringBuffer sb = new StringBuffer();
// 生成除数
long ss = randomS(s, r, sb);
sb.delete(0, Integer.parseInt(ss + ""));
// 生成被除数
long zz = randomS(z, r, sb);
// 求商
long scz = ss / zz;
// 求余数
long syz = ss % zz;
// 整出的同时必须满足,自身 、1必须除外
if (syz == 0 && zz != ss && zz != 1) {
System.out.println(ss + "÷" + zz + "=" + scz);
// 将配对的 组合存入 Set集合中,防止重复
set.add(ss + "÷" + zz + "=" + scz);
}
}
// 随机组合出需要的作运算的数字
public static long randomS(long s, Random r, StringBuffer sb) {
/**
* 有多少位,循环多少次
*/
for (int i = 0; i < s; i++) {
// 因为nextInt(9) 表示 0<=X<9 所以在第一次循环的时候逢0变成9,之后的循环无须
if (i == 0) {
int random = r.nextInt(9);
// 除数以n打头
int n = random == 0 ? 9 : random;
sb.append(n);
} else {
sb.append(r.nextInt(9));
}
}
// 最后返回需要的数字
return Long.parseLong(sb.toString());
}
/**
* 除数为s位,被除数为z位
* size则表示需要得出多少个配对组合
*/
public static void testCase(int s, int z, int size) {
//被除数位数,不能大于除数位数
if (z > s) {
System.out.println("被除数位数不能大于除数");
return;
}
//循环很多次,直到得出需要的组合数量,或者循环结束
for (long i = 0; i < 1000000000; i++) {
CPNumber(s, z);
if (set.size() == size) {
System.out.println(i);
return;
}
}
}
public static void main(String[] args) {
testCase(6, 5, 40);
System.out.println(set);
}
}
得出结果:
1. 输入除数位数(1 - 10)被除数位数(1 - 10);
2. 根据除数位数和被除数位数获取最大最小除数和最大最小被除数
3.在最大最小被除数范围内随机一个被除数
4. 分别用最大最小除数 除以被除数,获得一个商的范围
5.在商的范围内随机一个值。
6. 这样商和被除数都有了,互乘就是除数。
帮你做一个网页版的怎么样,明儿差不多这个时候给你网址。