return0;
}
3.设计算法,判断一个大整数能否被11整除。
可以通过以下方法:
将该数的十进制表示从右端开始,每两位一组构成一个整数,然后将这些数相加,判断其和能否被11整除。
例如,将562843748分割成5,62,84,37,48,然后判断(5+62+84+37+48)能否被11整除
//将一个大整数看成一个数组
//数组的奇数位对应数的10倍加上数组偶数对应数的本身
//验证结果能否被11整除
#include
usingnamespacestd;
intmain()
{
inta[9]={5,6,2,8,4,3,7,4,8};
intresult=0;//result为题目要求的各位之和
for(inti=0;i!
=9;++i)
{
if(i%2==0)
result+=a[i];//i为偶数位时,结果加上其对应数组数的本身
else
result+=a[i]*10;//i为奇数位时,结果加上对应数组数的10倍
}
if(result%11==0)
cout<<"该整数能被11整除"< else
cout<<"该整数不能被11整除"< return0;
}
4.数字游戏。
把数字1,2,…,9这9个数字填入以下含有加、减、乘、除的四则运算式中,使得该等式成立。
要求9个数字均出现一次且仅出现一次,且数字1不能出现在乘和除的一位数中(即排除运算式中一位数为1的平凡情形)。
¨¨×¨+¨¨¨÷¨-¨¨=0
5.设计算法求解anmodm,其中a、n和m均为大于1的整数。
(提示:
为了避免an超出int型的表示范围,应该每做一次乘法之后对n取模)
#include
usingnamespacestd;
intsquare(intx)
{
returnx*x;
}
//用递归思想
intresultmod(inta,intn)
{
if(n==0)
return1;
if(n%2==0)
returnsquare(resultmod(a,n/2));//n为偶数的时,取n的一半防止溢出
else
returna*resultmod(a,n-1);//n为奇数时,取n-1;
}
intmain()
{
inta,n,m;
cout<<"请输入a,n,m:
"<<"";
cin>>a>>n>>m;
cout<intresult=resultmod(a,n);
cout<<"a^nmodm的结果为:
"< return0;
}
6.设计算法,在数组r[n]中删除所有元素值为x的元素,要求时间复杂性为O(n),空间复杂性为O
(1)。
7.设计算法,在数组r[n]中删除重复的元素,要求移动元素的次数较少并使剩余元素间的相对次序保持不变。
#include
usingnamespacestd;
voiddeletere(inta[],intN)
{
intb[100]={0};
inti,k;
k=0;
staticintj=0;
for(i=0;i b[a[i]]++;
for(i=0;i<100;i++)
{
if(b[i]!
=0)
{
if(b[i]==2)
{
k++;
}
a[j]=i;
j++;
}
}
for(i=0;i cout<}
intmain()
{
inta[]={1,2,1,3,2,4};
deletere(a,6);
return0;
}
//在数组查找相同的元素
//把其中一个相同的数值的元素位置设成一个“特殊数值”
//输出所求函数
#include