数数X算法
1. 设计求一个数x的绝对值的算法
有一个函数叫做符号函数,定义如下:
-------┏ 1,x>0
sgnx=┝ 0,x=0
-------┗ -1,x
2. 数学算法:
N=6*A+3*B+C
其中,A代表可拆成三个不同自然数(如0 1 2)的种数,B代表可拆成二个不同自然数(如0 0 2)组合的种数,C代表可拆成三个相同自然数的种数;
1.X能被三整除则C等于1,否则等于0;
2.分析B,X=2*b1+b2;b1为[0,X/2]的自然数,共X/2+1个,但是,若X能被三整除则存在一种b1=b2的情况,所以此时B=X/2;
3.分析A,X=a1+a2+a3;假设a1<a2<a3;a2至少比a1大1,a3至少比a1大2,
则a1为[0,X/3-1]的自然数,共X/3个;
若(X-a1)能被2整除,则a2为[a1+1,(X-a1)/2-1]的自然数,共(X-a1)/2-a1-1个;
若(X-a1)不能被2整除,则a2为[a1+1,(X-a1)/2]的自然数,共(X-a1)/2-a1个;
a3为待定数,不需要考虑。
可根据以上分析写出代码让计算机进行计算
3. 求一个算法:N个数,用其中M个任意组合相加等于一个已知数X。得出这M个数是哪些数。
N有范围没
如果范围比较大的话用深搜,记得排序,注意剪枝
范围小的话直接穷举
也就是设一个字符串,里面有M个1,N-M个0,产生所有全排列
当一位为1时,就表示选择这个数,为0表示不选择
初始为a[] = 00...0111...1(M个1)使用next_permutation(a, a+n)产生所有含有M个1、N-M个0的全排列,并判断和是否为X
4. 任意给一个实数x,设计一个算法,求x的绝对值,并画出程序框图.
S1:输入一个实数X
S2:判断X的符号,若X≥0,则输出X;否则输出-X
程序:
INPUTX
IFX>=0THEN
PRINTX
ELSE
PRINT-X
ENDIF
END
5. 用自然语言描述求出一个数x的三次方和它的绝对值的算法
解:对于任意的x∈R
x^3=x*x*x
|x|=x(x≥0)
=-x(x≤0)
如有疑问,可追问!
6. 有10个数字(1,2,3,4,5,6,7,8,9,10) 取出一个 x,判断取出哪个数字
算法过程:
1、随机在10个数字里面取一个数字x,可利用随机函数通过取下标的方式取得10个数里面的任意一个,由此保证随机性。
2、遍历十个数的每个数是否与取得的数字相同,如果相同,则那个数就是所取得的未知数x
java代码:
publicstaticvoidmain(String[]args){
//由于指定了数字池,所以先存放到一个数组里面
int[]numPool={1,2,3,4,5,6,7,8,9,10};
Randomrd=newRandom();
intrn=(rd.nextInt(10)); //随机生成0-9的数字作为下标
System.out.println("随机取一个数字x...");
intx=numPool[rn]; //取出随机取出的未知数x,存至resultNum变量内
for(inti=0;i<10;i++){ //利用简单for循环遍历数组
if(resultNum==numPool[i]){ //比较数组中的每个数与未知数x,如果相同,则输出
System.out.println("所取得的数字是:"+numPool[i]);
System.out.println("随机取得的数字x为:"+resultNum);
}
}
}
其他语言代码大同小异