1、曾经在软通动力写过的算法题其中有一小部分是参考网上的资料,现在拿出来给大家分享!
第3章 控制语句
/* 1、打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153 = 13 + 53 + 33。 */
#include
2、 cout<<"i="< void main() { int i,j,sum=0,a[50],k,t; for(i=1;i<=1000;i++) { sum=0; for(j=1;j
3、
{
sum+=j;
a[k++]=j;
}
}
t=k;
if(sum==i)
{
cout<";
for(k=0;k
4、 a,sn=0.0,sum=0.0;
int n,i;
cout<<"please input a number";
cin>>a;
cout<<"please input n number";
cin>>n;
sn=a;
sum=a;
for(i=2;i<=n;i++)
{
sum=sum*10+a;
sn+=sum;
}
cout<<"Sn="< 5、多高?*/
#include 6、0天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。*/
#include 7、in()
{
int a;
cout<<"请输入a的值:";
cin>>a;
cout<<"a的值为:"<
void main()
{
int i,j,temp,a[10];
cout<<"please input ten numbers:\n";
for(i=0;i<10;i++)
cin>>a[i];
for(i=0;i<10;i++) / 8、/每循环一次确定数组中一个数的位置
for(j=i+1;j<10;j++) //每次循环对比一个数的大小
{
if(a[i]>a[j])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
cout<<"resort result=";
for(i=0;i<10;i++)
cout< 9、1)*Pn-2(x))/n (n > 1) */
#include 10、1)
return x1;
else if (n1>1)
return ((2*n1-1)*x1*fun(n1-1,x1)-(n1-1)*fun(n1-2,x1))/n1;
}
/* 3、编写一函数,由实参传来一字符串,统计此字符串中字母、数字、空格、和其它字符的个数,并在主函数中输入字符串以及输出上述结果。 */
#include 11、
judge(a);
}
void judge(char a[100])//判断字符类型
{
int letter=0,number=0,others=0,i=0;
while(a[i]!='\0')
{
if ((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='z')) letter++;//统计字母个数
else if (a[i]>='0' && a[i]<='9') number++;//统计数字个数
else others++;//统计其他数个数
i++;
}
cout<<"letter="< 12、ter<<" number="< 13、ad(year);
if (ly==1)
a[1]=29;//366天
else a[1]=28;//365天
for(i=0;i 14、求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。 */
#include 15、 is "< 16、们的最大公约数为最小公倍数
}
/* 6、写一函数,将两个字符串连接。 */
#include 17、母(A、E、I、O、U)复制到另一个字符串,然后输出。 */
#include 18、
{
while(*q!='\0')
{
if (*q=='a'||*q=='A'||*q=='e'||*q=='E'||*q=='i'||*q=='I'||*q=='o'||*q=='O'||*q=='u'||*q=='U')
*p++=*q;
q++;
}
}
/* 8、写一函数,输入一个四位数字,要求输出这4个数字字符,但每两个数字间空一空格。如输入1990,应输出“1 9 9 0”。 */
#include 19、
{
const int size=10;
char a[size];
cin.getline(a,size);
outs(a);
}
void outs(char a[10])
{
int i;
if(strlen(a)<=4)
{
for(i=0;i<4;i++)
cout< 20、de 21、
cout< 22、a[i][j]<=9)//当输出个位数之后输出4个空格保持整齐
cout<<" ";
else if (a[i][j]>=10&&a[i][j]<=99)//当输出十位数之后输出3个空格保持整齐
cout<<" ";
else if(a[i][j]>=100&&a[i][j]<=999)//当输出百位数之后输出2个空格保持整齐
cout<<" ";
else cout<<" ";//当输出百位数之后输出1个空格保持整齐
}
cout< 23、[15])
{
int i,j;
for(i=0;i<15;i++)
for(j=0;j<=i;j++)
{
if(j==0||j==i)//三角形第一列和对角线被赋值为1
a[i][j]=1;
else a[i][j]=a[i-1][j-1]+a[i-1][j];//算出其余的数组元素
}
}
/* 3、编一程序,将两个字符串连接起来,不要用strcat函数。 */
#include 24、
const int size=100;
char a[size]="Hello";
char b[size]="Bye";
cout<<"a="< 25、
/* 4、打印“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如:三阶魔方阵:
8 1 6
3 5 7
4 9 2
要求打印由1到n2的自然数构成的所有魔方阵。 */
//方法一:输出N介魔方阵,但每介只输出一种。
#include 26、
cin>>n;
k=n/2;//确定第一个数列数
square(a,k,n);
for(i=0;i 27、
else if(j<0)//当数组行越出范围时候,确定数组正确位置
j+=n;
else if(k>=n)//当数组列越出范围时候,确定数组正确位置
k-=n;
else if(a[j][k]!=0)//当数组原位置有数时候,确定数组位置
{
j+=2;k-=1;
}
a[j][k]=i;
}
}
//方法二:输出N介魔方阵所有魔方阵。
#include 28、
void printA(int **p,int n)//输出这个n阶魔方阵
{
cout< 29、 0;
bool YesOrNo = true;
for(j = 0;j < n;j++)//第一行总和
{
sum += p[0][j];
}
for(i = 1;i < n;i++)//判断每行总和是否相等
{
NowSum = 0;
for(j = 0;j < n;j++)
{
NowSum += p[i][j];
}
if(NowSum != sum)
{
YesOrNo = false;
goto END;
}
}
for(i = 0;i < n;i++)//每列是否相等
{
N 30、owSum = 0;
for(j = 0;j < n;j++)
{
NowSum += p[j][i];
}
if(NowSum != sum)
{
YesOrNo = false;
goto END;
}
}
NowSum = 0;
for(i = 0,j = 0;i < n,j < n;i++,j++)//主对角线是否相等
{
NowSum += p[i][j];
}
if(NowSum != sum)
{
YesOrNo = false;
goto END;
}
NowSum = 0; 31、
for(i = n-1,j = 0;i >= 0,j < n;i--,j++)//次对角线是否相等
{
NowSum += p[i][j];
}
if(NowSum != sum)
{
YesOrNo = false;
goto END;
}
END:
return YesOrNo;
}
void combination(int **p,int n,int *a)//求m = n*n个数(1,2,3.....m)的全排列
{
int m = n*n;
static int Num = 0;
int *b_val = 32、new int[m];
int c = 0,k,i,j;
b_val[c] = -1;//一维数组首地址的值赋-1 c[0]-1
while(b_val[0] < m) //-1
{
if(++b_val[c] < m) //分别从0开始累加每个元素值,并限制不超出最大阶数
//b[0]0 [1]0 [1]1 [2]0 [2]1 [2]2...[6]6...[7]0...[7]7 [8]0...[8]8 判断魔方 [8]9 012345678
// 33、 [7]8 [8]0...[8]7 判断魔方 [8]8 [8]9 012345687
// [6]7...[7]0...[7]6 [8]8 012345768
// 012345786
// 01234586 34、7 ...
// 876543210
{
for(k = 0;k < c;k++) //是否与前面数字重复,如有重复元素跳出,否则使K下标等于C下标
if(b_val[k] == b_val[c])
break;
if(k == c)//如果没有重复元素,就可以确定当前元素值,并继续排列下一个下标的数组元素
{
if(c+1 < m) //1 2 35、3...7 8 如果不满足条件,则生成了一组排列方式,否则继续排列下一个元素
// 8
{
++c; //1 2 3...7 8
// 8
b_val[c] = -1;
// continue;
}
else //生成了一组排列方式
{
k = -1;
for(i = 0;i < n;i++)
{
for(j = 0;j < n;j++)
{
p[i][j] = a[b_val[++k]];//a[0]-a[8]
}
}
//判断是否为n阶魔方阵 36、
if(Judge(p,n))
{
printA(p,n);
}
}
}
}
else
{
c--;
}
}
delete []b_val;
}
void evaluate(int **p,int n)//给n阶方阵的元素赋值
{
int i;
int *AllNum = new int[3*3];
for(i = 1;i <= n*n;i++)
{
AllNum[i - 1] = i;
}
combination(p,n,AllNum);
delete []AllNum;
} 37、
void main()
{
int i,n,**a;
string s;
do
{
//输入n阶方阵的阶数n
cout<<"请输入n阶方阵的阶数n(退出程序按e或E键):";
cin>>s;
if(!strcmp(s.c_str(),"e") || !strcmp(s.c_str(),"E"))
{
break;
}
else if(s.find_first_not_of("0123456789") != string::npos)
{
cout<<"请输入有效的数字,不能含有非数字的字符。"< 38、tinue;
}
else
{
n = atoi(s.c_str());
if(n < 1)
{
cout<<"请输入有效的数字,必须 >= 1。"< 39、i = 0; i < n; i++)
{
delete []a[i];
}
delete []a;
}
}while(1);
return;
}
/* 5、求一个3x3矩阵对角线元素之和。*/
#include 40、
cout< 41、之和
}
/* 6、编写一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中。不用strcpy函数。拷贝时,‘\0’也要拷贝过去。 ‘\0’后面的字符不拷贝。*/
#include 42、[],char b[])
{
int i;
for(i=0;b[i]!='\0';i++)
{
a[i]=b[i];
}
a[i]='\0';
}
/* 7、用筛选法求100之内的素数。(所谓素数就是除了1和它本身以外,不能再被别的整数整除,这种数称作素数(也称质数)。)*/
#include 43、i==j)//相等为素数
cout<<" "<
void csort(int a[10]);
void main()
{
int i;
int a[10]={6,4,2,7,9,0,1,6,3,0};
for(i=0;i<10;i++)//输出原数组数据顺序
cout< 44、
cout< 45、用指针实现)*/
#include 46、) //每循环一次确定数组中一个数的位置
for(j=i+1;j<10;j++) //每次循环对比一个数的大小
{
if(p[i]>p[j])
{
temp=p[j];
p[j]=p[i];
p[i]=temp;
}
}
}
/* 2、输入一个字符串,内有数字和非数字字符,如A123x456 1233?8997jhlkll
将其中连续的数字作为一个整数,依次存放到一数组a中,统计共有多少个整数,并输出这些数。*/
#include 47、s.h>
int charge(int *,char *);
void main()
{
int a[50],i,numb;
char b[50];
cout<<"please input a character string:"<






