验证命题:任何各位数字不全相同的3位正整数经以下变换后均能变为495,称495为3位整数的黑洞数。
变换步骤:对于任意—个各位数字不全相同的3位工整数,将组成该正整数的3个数字重新组合分别生成一个最大数和一个最小数,用最大数减去最小数得到一个新的了位数;再对新的3位数重复上述操作,最多重复7次。
编写程序,接收键盘输入的一个3位正整数,判断各位数字是否不全相同,若不全相同则实施以上变换(不超过7次),输出每步变换后得到的3位整数。
供参考,谢谢!
#include <stdio.h>
int func1(int n);
int func2(int n);
int main(int argc, char *argv[])
{
int n, t;
scanf("%d", &n);
if (!func1(n))
{
printf("%d不是黑洞数!\n", n);
getchar();
return -1;
}
t = n;
for (int i = 0; i < 7 && t != 495; i++)
{
t = fun2(t);
printf("%d\n", t);
}
return 0;
}
/*判断一个三位数是否不全相同
*/
int func1(int n)
{
if (n < 100 || n > 999)
return 0;
int a, b, c;
a = n % 10;
b = n / 100;
c = n / 10 % 10;
if (!(a == b && b == c))
return 1;
return 0;
}
//生成新的数
int fun2(int n)
{
int a[3], t;
a[0] = n % 10;
a[1] = n / 100;
a[2] = n / 10 % 10;
for (int i = 0; i < 2; i++)
{
for (int j = i + 1; j < 3; j++)
{
if (a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
return a[2] * 100 + a[1] * 10 + a[0] - (a[2] + a[1] * 10 + 100 * a[0]);
}
编程基础第六版 课后题
代码如下
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,t;
int a[15];
int x,l,h,mid,n;
n=15;
l=0;
h=n-1;
printf("请输入15个不同数字,按一次输入一个,依次输入15次的方法输入数字:\n");
for(i=0;i<15;i++)
scanf("%d",&a[i]);
for(j=0;j<14;j++)
{
for(i=0;i<14-j;i++) //这里我第一次写也忽略了j要不断的去替换i,所以对于i来说它的循环条件应该是14-j,有好多人可能和我一样写成i<15啦
if( a[i]<a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
printf("按从大到小的排序结果:");
for( i=0;i<15;i++)
printf("%d\t",a[i]);
printf("\n");
for (l=0, h=14, printf("请输入一个数:"), scanf("%d", &x); l<=h;)//while也可以但是我很奇怪用while会提前退出循环哈哈哈
{
mid=(l+h)%2;
if (x>a[mid])h=mid-1;
else if (x<a[mid])l=mid+1;
else
{
printf("%d是第%d位数",x,mid+1);
break;
}
}
if(x!=a[mid])
printf("查无此数!");
return 0;
}
供参考:
#include <stdio.h>
int max (int a,int b,int c);
int min (int a,int b,int c);
int middle (int a,int b,int c);
int main()
{
int a,b,c,p,q,n;
printf("Please input n:");
scanf("%d",&n);
while (n!=495)
{
a=n/100; b=n%100/10; c=n%10;
p=100*max(a,b,c)+10*middle(a,b,c)+min(a,b,c);
q=100*min(a,b,c)+10*middle(a,b,c)+max(a,b,c);
n=p-q;
printf("%d\n",n);
}
return 0;
}
int max(int a,int b,int c)
{
return a > b ? a > c ? a : c : b > c ? b : c;
}
int min(int a,int b,int c)
{
return a < b ? a < c ? a : c : b < c ? b : c;
}
int middle(int a,int b,int c)
{
int maxx = max(a,b,c);
int minn = min(a,b,c);
if (a < maxx && a > minn)
return a;
if (b < maxx && b > minn)
return b;
if (c < maxx && c > minn)
return c;
}