利兹大学和伯明翰大学:求解一条编程题目

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/20 01:00:09
输入一个数,让它赋值给M,然后各位的数字由大到小排列变成另一个数N输出,例如输入57046,赋值给M后,经过运算后输出N,且N=76540。
要求:用C语言编写,只能用选择,循环等初级语句,不必用数组或结构体或指针或文件,只能调用数学函数。
注意:输入的数可以是任意位的。
请写出完整的过程
再补充一点,事先是不知道M有多少位的
可惜,不知道是什么原因,你们的编写一个都无法编译,全是Unsuccessful build,另外我的意思不是不能用数组,而是尽量简便些,只要是简便的而且又是初等的,即不需要用位运算只用初等的循环选择结构。

这题一定要用数组的,最近要考试了,见过类似问题,
呵呵,后天就考二级了
#include "math.h"
main()
{int i,j,k,t,a[20];long m,n;
printf("请输入一个数:");
scanf("%ld",&m);n=m;
t=(int)log(m)/log(10); //用换底公式求出位数t//
for(i=0;i<=t;i++)
{a[i]=n%10;n/=10;}
for(i=0;i<t;i++) //重新排序//
for(j=i+1;j<=t;j++)
if(a[i]<=a[j]){k=a[i];a[i]=a[j];a[j]=k;}
n=0;
for(i=0;i<=t;i++)
n=n*10+a[i];
printf("m=%ld,n=%ld",m,n);
}
没有调试过,试试吧,如无意外没问题

#include <stdio.h>

main()
{
long m,n=0;
int i=0,max,num=1,temp=0;
printf("Plese Input a Number:");
scanf("%d",&m);
temp=m;
while(temp/10!=0)
{
num++;
temp=temp/10;
}

for(int j=0;j<num;j++){
max=m%10;
while(m/10!=0)
{
m=m/10;
if(m%10>max)
{
i=i*10+max;
max=m%10;
}
else
{
i=i*10+m%10;
}
}
n=n*10+max;
m=i;
i=0;
}
printf("The Finally Number is:%ld\n",n);
}

#include<math.h>
main()
{
long m,n,x;
int i,j,a[20],temp;
x=1;
printf("Please enter M:\n");
scanf("%ld",&m);
for(;;)
{
int temp;
temp=(int)(m/(pow10(x)));
if(temp==0) break;
else x++;
}
printf("%d\n",x);
for(i=x-1;i>0;i--)
{
a[i]=(int)(m/pow(10,i));
m=m-a[i]*pow(10,i);
}
a[0]=m%10;
for(i=0;i<x;i++)
{
printf("%d ",a[i]);
}
for(i=x-1;i>0;i--){
for(j=0;j<i;j++)
{
if(a[j]<a[j+1])
{
temp=a[j];a[j]=a[j+1];a[j+1]=temp;
}
}
}
for(j=0;j<x;j++)
{
printf("%d",a[j]);
}
}
我刚写的,测试成功!楼主测试下!

这次我帮你把它的改成C语言版的了,并且在我的机器上可以编译可以运行,你试一下吧
#include"stdio.h"
#include<math.h>
void main()
{
long int M=0;
long int N=0;
printf("%s","now enter M:");
scanf("%d",&M);
N=M;
int x=1;
for(;;)
{
int temp;
temp=(int)(M/(pow(10,x)));
if(temp==0) break;
else x++;
}
for(int k=1;k<=x;k++){

for(int i=x;i>=1;i--)
{
int high=(int)(M/(pow(10,i-1))-((int)(M/(pow(10,i))))*10);
for(int j=i-1;j>=1;j--)
{

if(high>=(int)(M/(pow(10,i-2))-((int)(M/(pow(10,i-1))))*10))
{
continue;
}
else
{
int low=(int)(M/(pow(10,j-1))-((int)(M/(pow(10,j))))*10);
int lownew=high;
int highnew=low;
N=(int)(highnew*pow(10,i-1)+(N-high*pow(10,i-1)));
N=(int)(lownew*pow(10,j-1)+(N-low*pow(10,j-1)));
M=N;
}
}
}

}
printf("%d",N);
}

#include<math.h>
main()
{ long m,n=0;
int temp,b[10]={0},j=0,i,k=0,cnt=0;/*CNT为输入数字的位数*/
clrscr();
printf(\"shurushuzi\\n\");
scanf(\"%ld\",&m);/*输入数字/*
while(m>0)
{ b[j++]=m%10;
cnt++;
m/=10;
}
for(j=0;j<cnt;j++)
printf(\" %d\",b[j]); printf(\"\\n\"); /*检查是否正确*/
/*冒泡排序*/
for(j=0;j<cnt-1;j++)
{ for(i=j+1;i<cnt;i++)
if(b[i]>b[j])
{ temp=b[i];b[i]=b[j];b[j]=temp;} }/*排序*/
for(j=0;j<cnt;j++)
printf(\" %d\",b[j]);
printf(\"\\n\");
printf(\"%d\",b[cnt-1]);
printf(\"\\n\");/*检验是否排序正确*/
for(j=cnt-1;j>=0;j--)
n+=b[j]*pow(10,k++); /*算出N的值*/
printf(\"%ld\\n\",n);
/*for(j=0;j<cnt;j++)
printf(\"%d\",b[j]);*/
/*倒序输出*/
getch();
}我的试一下 结果不正确 改一下M,N的数据类型就好拉

#include <iostream.h>

const long MAX = 1000;

template <class SomeType>
long Partition(SomeType data[], long low, long high)
{
SomeType pivot = data[low];

while (low < high)
{
while ( low < high && !(pivot < data[high]) )
high --;
if (low < high)
data[low ++] = data[high];

while ( low < high && !(data[low] < pivot) )
low++;
if (low < high)
data[high --] = data[low];
}
data[low] = pivot;

return low;
}
template <class SomeType>
void Qsort(SomeType data[], long low, long high)
{
long cut;
if(low < high)
{
cut = Partition(data,low,high);
Qsort(data,cut+1,high);
Qsort(data,low,cut-1);
}
}

int main()
{
char number[MAX];
long length;

cin >> number;
length = strlen(number);

Qsort(number, 0, length-1);

cout << number << endl;
return 0;
}

不知道楼主的意思是不必采用数组还是不能采用数组哈?如果说得明确一点,具体一点的话或许会更好的哦!