关于网友提出的“ 用c++写两个简单的程序,谢谢!”问题疑问,本网通过在网上对“ 用c++写两个简单的程序,谢谢!”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 用c++写两个简单的程序,谢谢!
描述: 1。编写一递归程序实现任意正整数向八进制数的转换。(我对递规总有些恐惧,想不出来)
2。找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。(这个我用了三个循环,不知道有没有别的方法)
最好是完整的程序代码,将输入、输出的语句写出来,谢谢了
解决方案1: to arfi() ( )
你的程序应该要求输入的是 正数 :)
解决方案2: 用C写的,请各位评论一下:
#include
int main()
{
int i,j,k,m,n;
int array[6][8];
for(i=0;i<6;i++)
for(j=0;j<8;j++)
array[i][j]=(i+j)%5;
for(i=0;i<6;i++)
{for(j=0;j<8;j++)
printf("%d",array[i][j]);
printf("\n");}
for(i=0;i<6;i++)
{
m=i;
k=0;
for(j=0;j<8;j++)
if(k<>
{
k=array[i][j];
n=j;
}
for(m=0;i<6;i++)
if(k<>
break;
else if(m=5)
printf("andian %d,%d,%d\n",i,n,array[i][n]);
}
return 0;
}
解决方案3: 好多书上豆油这种题
自己找吧
解决方案4: /*vc6 下编译*/
#include
#include
int findmax(int *p1,int n,int *save,int *num);
bool cmpx(int x,int *p,int N,int M);
void main()
{
int N,M,n=0,m=0,*head=NULL,*p1,i;
int num=0;//找到最小的元素的个数
int *tmp,*p_tmp,x;
printf("输入数组阶数N*M:\n(列数) N=:");
scanf("%d",&N);
printf("(行数)M=:");
scanf("%d",&M);
p1=head=(int *)malloc(sizeof(int)*N*M+1);
tmp=(int *)malloc(sizeof(int)*N);
//用于保存某行中最大元素的列坐标值
if(head==NULL||tmp==NULL)
{
puts("申请内存失败");
exit(-1);
}
for(i=0;i<>
{
printf("Input data[%d][%d]:",m,n++);
scanf("%d",p1++);
if(n==N)
n=0,m++;
}
p1=head;
for(i=0;i<>
{
printf("%4d",*(p1++));
if((i+1)%N==0)
putchar('\n');
}
for(i=0;i
{
num=0;
//找出此行中最大的元素x,
//记录 包括相等的元素的位置(相对与head的偏移量)
x=findmax(head+N*i,N,tmp,&num);
//比较同列中次元素是不是最小的。
p_tmp=tmp;
while(num--)
{
if(cmpx(x,head+*p_tmp,N,M)==true)
printf("\ndata[%d][%d]=%d",i,*p_tmp++,x);
}
}
free(head);
free(tmp);
puts("");
system("pause");
}
int findmax(int *p1,int n,int *save,int *num)
{
int x,i=0,*p=p1,*p_save=save;
x=*p;
for(i=0;i<>
{
if(x<*(p+i))
x=*(p+i);
}
for(i=0;i<>
{
if(x==*(p+i))
{
(*num)++;
*p_save++=i;
}
}
return x;
}
bool cmpx(int x,int *p,int N,int M)
{
int i;
for(i=0;i<>
{
if(x>*(p+i*N))
return false;
}
return true;
}
解决方案5: 找鞍点的程序要求行列中最大和最小值唯一,如果不唯一,不能保证能找出来。
解决方案6: //编写一递归程序实现任意正整数向八进制数的转换
void int2oct(int o)
{//把字符输出到屏幕
if(!o)return;
int2oct(o/8);
putc(o%8+'0', stdout);
}
char str[32];
int iii=0;
void int2oct2(int o)
{//把字符保存到字符串
if(!o)return;
int2oct(o/8);
str[iii++]=o%8+'0';
}
//找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点
#define C 10
#define R 10
int dat[C][R], cmaxi[C], rmini[R];
void rowmax(int idx)
{
cmaxi[idx]=0;
for(int i=1;i<>
if(dat[idx][i]>cmaxi[idx])cmaxi[idx]=i;
}
void colmin(int idx)
{
rmini[idx]=0;
for(int i=1;i<>
if(rmini[idx]>dat[i][idx])rmini[idx]=i;
}
int kkk()
{
int i; bool findf=false;
for(i=0;i<>
for(i=0;i<>
for(i=0;i<>
{
if(cmaxi[ rmini[R]] == i){ findf=true;break;}
}
if(findf){
printf("鞍点出现在第%d行第%d列。\n",i,cmaxi[i]);
}else{
printf("没有鞍点\n");
}
return 0;
}
解决方案7: #include
#include
class Number
{
private:
int Num; //数组OctNum[]的有效长度
char OctNum[12]; //用字符数组来存储转化后的八进制数
public:
Number():Num(0){OctNum[0] = '\0';}
void Convert(int n);
void display(void);
};
void Number::Convert(int n)
{
char ch;
if(n<8)
{
OctNum[Num] = n+48;
return;
}
else
{
ch = n%8+48;
OctNum[Num++] = ch;
Convert(n>>3);
}
}
void Number::display(void)
{
for(int i=Num; i>=0; i--)
cout<<>
cout<<>
}
void main(void)
{
Number num;
num.Convert(128);
num.display();
}
以上介绍了“ 用c++写两个简单的程序,谢谢!”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3318733.html