c语言题把1,2,3,4,5,6,7,8,9组合成三个三位数,要求每个数字仅用一次,并且每个三位数均是完全平方数

来自:    更新日期:早些时候
用C语言编程求1234四个数能组成多少互不相同且不重复的三位数~

  三位数有三个位置,每一个位置看作一个变量,假设为i、j、k,
  互不相同且不重复的三位数,即i不等于j且j不等于k且i不等于j,用C语言逻辑表达式描述为:
i!=j&&j!=k&&i!=k  三个位置,每一个位置有1、2、3、4,四种可选值,因此其排列数为4^3 = 64种排列组合方法,三个位置互不相同,按分步乘法原理得一共有4x3x2 = 24种排列方法。编写示例代码如下:
#include int main(){int i,j,k,n=0; //n用于统计个数for(i=1;i<5;i++)for(j=1;j<5;j++)for(k=1;k<5;k++)//保证三位数不重复if(i!=j&&i!=k&&j!=k){n++;printf("%d%d%d ",i,j,k);if(n%4==0)printf("
");}printf("
一共:%d
",n);return 0;}

百位数有4种选择,为与百位数不重复,十位数就只有3种选择了;同样道理,个位数就只有2种选择。所以1、2、3、4等4个数字能组成4x3x2共24种互不相等且没有重复数字的3位数。根据上述原理,可用一个3层嵌套for循环来完成,代码如下:
#include "stdio.h"int main(int argc,char *argv[]){
int i,j,k,t;printf("A total of %d no repeat number 3-digits, they are as follows:
",4*3*2);
for(t=0,i=1;i<=4;i++)//百位数字有4种选择for(j=1;j<=4;j++)//十位数字有3种选择
if(j!=i)//遇到十位数字等于百位数字时跳过
for(k=1;k<=4;k++)//个位数字只有2种选择了
if(k!=i && k!=j)//个位数字与十位或百位数字相等时跳过
printf(++t%10 ? "%4d" : "%4d
",i*100+j*10+k);//输出该三位数
if(t%10)printf("
");
return 0;
}

扩展资料
#include
main()
{
int i, j, k;
int m=0;
for(i=1;i<5;i++)
for(j=1;j<5;j++)
for(k=1;k<5;k++)
{
if(i!=j&&k!=j&&i!=k)
{
printf("%d%d%d
",i,j,k);
m++;
}
}
printf("%d
",m);
getch();
}
参考资料:百度百科 for循环

C语言程序如下:

int main(){

char temp[3];

for(int i = 123;i<=987;i++){

itoa(i, temp, 10);//转换成string

if(temp[0] != temp[1] && temp[0] != temp[2] && temp[1] != temp[2]){

int a = sqrt(i);

if(a * a == i){

std::cout << i << std::endl;

}
}
}
return 0;

扩展资料:

完全平方数性质如下:

(1)、平方数的个位数字只能是 0, 1,4,5,6,9 。

(2)、任何偶数的平方一定能被 4 整除;任何奇数的平方被 4(或 8)除余 1,即被4 除余 2 或 3 的数一定不是完全平方数。

(3)、完全平方数的个位数字是奇数时,其十位上的数字必为偶数。完全平方数的个位数字是 6 时,其十位数字必为奇数。

(4)、凡个位数字是 5 但末两位数字不是 25 的自然数不是完全平方数;末尾只有奇数个 0 的自然数不是完全平方数;个位数字是 1,4,9 而十位数字为奇数的自然数不是完全平方数。

(5)、除 1 外,一个完全平方数分解质因数后,各个质因数的指数都是偶数,如果一个数质分解后, 各个指数都为偶数, 那么它肯定是个平方数。 完全平方数的所有因数的总个数是奇数个。因数个数为奇数的自然数一定是完全平方数。

参考资料:百度百科-完全平方数



#include<stdio.h>

int main(void)
{
    int i, j, k, n, m;
    for (i = 1; i <= 9; ++i)
    {
        for (j = 1; j <= 9; ++j)
        {
            if (i == j)
            {
                continue;
            }
            for (k = 1; k <= 9; ++k)
            {
                if (i == k || j == k)
                {
                    continue;
                }
                n = i * 100 + j * 10 + k;
                m = 1;
                while (m * m <= n)
                {
                    if (m * m == n)
                    {
                        printf("%d
", n);
                    }
                    m++;
                }
            }
        }
    }
    return 0;
}


#include <iostream>
#include <string>
int main(){
char temp[3];

for(int i = 123;i<=987;i++){
itoa(i, temp, 10);//转换成string
if(temp[0] != temp[1] && temp[0] != temp[2] && temp[1] != temp[2]){
int a = sqrt(i);
if(a * a == i){
std::cout << i << std::endl;
}
}
}
return 0;
}


c语言题把1,2,3,4,5,6,7,8,9组合成三个三位数,要求每个数字仅用一次,并且每个三位数均是完全平方数视频

相关评论:
  • 18185496626c语言int a[ ]=(1,2,3,4,5,6) *P=a,什么意思,*P=1?
    娄颜青P=a 把数组a的首地址赋值给指针p,a数组的首个元素 a [0]的地址就是数组a的首地址,所以p指向的是a [0],那么对P解引用也就得到了a[0]的值就是1

  • 18185496626c语言的问题 int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; int (*...
    娄颜青所以一共向后移动了9个单位,即得出运行结果10!要想正确表达a[1][2],应该是(*(ptr+1))[2],数组的运算符[ ]比间值运算符*的优先级高,(*(ptr+1))[2]表示a向后移动一个单位即三个Int,此时ptr指向4,再往后移动2个Int指向6。其实遇到这类问题画内存结构图比较容易理解了 ...

  • 18185496626c语言编写程序如何实现输入1 2,会输出3 4 5……,输入1 3,输出5 7 9...
    娄颜青include<stdio.h>int main(){int a,b,i;scanf("%d%d",&a,&b);b-=a;for(i=a;i

  • 18185496626C语言问题: int *p; int a[] = {1,2,3,4,5,6}; *++p += 1; 这句话怎...
    娄颜青++p += 1 等同于下面几条语句 { p++;\/\/指针后移一位 *p=*p+1;\/\/指针指向的地址的值加1 }

  • 18185496626C语言题:求1的阶层2的阶层3的阶层4的阶层5的阶层之和,用一个循环结构完...
    娄颜青include <stdio.h>int main(){int i,k=1,s=0;for(i=1;i<=5;i++){k*=i;s+=k;}printf("%d",s);return 0;}运行结果截图:

  • 18185496626C语言问题:已有定义int a[10]={1,2,3,4,5,6,7,8,9,10} 要求通过指针完成...
    娄颜青“for(p=a;p-a<10;p++)”这个循环已经让p指向了数组中最后一个元素,所以“for(i=k;i<10;i++)”在这个循环之前应该让p重新指回数组的第一个元素,故改为for(i=k,p=a;i<10;i++)另外 删除一个元素之后 数组中只有9个元素,所以应当把a[9]赋值为'\\0'或者在最后一个循环中控制条件...

  • 18185496626c语言问题,输入执行12345# 求答案135的原因
    娄颜青12345 第一次循环,c=getchar()读取1,此时c=1;getchar()读取2,2!='#';执行putchar(c),即数出1 第二次循环,c=getchar()读取3,此时c=3;getchar()读取4,4!='#';执行putchar(c),即数出3 第三次循环,c=getchar()读取5,此时c=5;getchar()读取#,2=='#';结束执行 总结:数出13 ...

  • 18185496626...用一个死循环 打印出下列4行数字 1,2,3,4,5,6,7,8,9 9,8,7,6,5...
    娄颜青while(1){ for( i = 1;i<10;i++){ printf("%d",i);} printf("\\n");for( i = 1;i<10;i++){ printf("%d",(10 - i));} printf("\\n");} for( i = 1;i<5;i++){ printf("%d",i);} for(i=0;i<3;i++){ printf(%d,(9 - i));} printf("\\n");for(i...

  • 18185496626一个c语言编程问题,建立一百个目录,分别叫1,2,3,4,5...100
    娄颜青给你思路,剩下自己百度就行了,其实就是全部都用CFile的函数就可以 了,内容的话,从1开始输出这种就不用介绍怎么实现了吧。。。1、创建文件夹,用CFile就可以了,里面有makeDir的函数 2、创建文件,这一步不需要可以去做,只要调用输出文件流,系统检测到文件不存在会自动生成。3、输出内容,也是C...

  • 18185496626C语言编程题目:0、1、2、3、4、5六个数字不重复使用,能构成多少个4位奇...
    娄颜青用一个最笨的办法可以简单求出——代码文本:include "stdio.h"int main(int argc,char *argv[]){ int s,i,j,k,t,n;for(n=s=0,i=1;i<6;i++)for(j=0;j<6;j++)if(j!=i)for(k=0;k<6;k++)if(k!=i && k!=j)for(t=1;t<6;t+=2)if(t!=k && t!=j && t!=...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网