!~~[有一个九位数,它由1到9这9个数组成,每个数字刚好出现一次.这个九位数前N位能被N整除]

作者&投稿:藩食 (若有异议请与网页底部的电邮联系)
是这个吧!~~[有一个九位数,它由1到9这9个数组成,每个数字刚好出现一次.这个九位数前N位能被N整除]~

随便,只要第5位是5

对于任意一个整数,无论有多少位,由同余的性质可以推导出一个判断能否被7整除的原则:从右边第一位数开始,每个位数依次与1,3,2,6,4,5,1,3,2,6,4,5,…相乘,然后相加的和能被7整除,则这个整数能被7整除。

对与一个7位数ABCDEFG,如果能被7整除,根据上面的原则,

有A+5B+4C+6D+2E+3F+G 的和能被7整除,

因为5B+6D+2E+3F=5X8+6X6+2X5+3X4=40+36+10+12=98,98能被7整除,

所以A+4C+G的和也要能被7整除。

ps. 关于同余的性质,请百度。。

因为是九位数,没有重复数字,前N位能被N整除
所以偶数位上一定是偶数,奇数位上一定是奇数
5 一定是在第五位上

简单循环遍历

#include <stdio.h>

int main(void)
{
long i[9];
long j, n;

i[4] = 5;
for (i[0] = 1; i[0] < 10; i[0] += 2)
{
for (i[1] = 2; i[1] < 9; i[1] += 2)
{
for (i[2] = 1; i[2] < 10; i[2] += 2)
{
if (i[2] == i[0])
continue;
for (i[3] = 2; i[3] < 9; i[3] += 2)
{
if (i[3] == i[1])
continue;
for (i[5] = 2; i[5] < 9; i[5] += 2)
{
if (i[5] == i[3] || i[5] == i[1])
continue;
for (i[6] = 1; i[6] < 10; i[6] += 2)
{
if (i[6] == i[4] || i[6] == i[2] || i[6] == i[0])
continue;
for (i[7] = 2; i[7] < 9; i[7] += 2)
{
if (i[7] == i[5] || i[7] == i[3] || i[7] == i[1])
continue;
for (i[8] = 1; i[8] < 10; i[8] += 2)
{
if (i[8] == i[6] || i[8] == i[4] || i[8] == i[2] || i[8] == i[0])
continue;

n = 0;
for (j = 0; j < 9; j++)
{
n = n * 10 + i[j];
if (n % (j + 1) != 0)
break;
}
if (j == 9)
printf("%ld\n", n);
}
}
}
}
}
}
}
}
}

就一个数符合

381654729

位数为9,所以枚举复杂度为O(9!)
完全可以接受
加上剪枝,0MS出解
参考代码如下

使用了dfs来实现枚举
#include<iostream>
using namespace std;
typedef long long llong;
bool hash[10];//标记是否使用过...
void dfs(int dep,llong val)
{
int i;
llong tmp;
if(dep==9)//9位了
{
cout<<val<<endl;
return;
}
for(i=1;i<=9;++i)
{
if(!hash[i])
{
hash[i]=true;
tmp=val*10+i;
if(tmp%(dep+1)==0)
dfs(dep+1,tmp);
hash[i]=false;
}
}
}
int main()
{
dfs(0,0);
return 0;
}

他们的都过于复杂,,,我有简单办法,,你可以找我聊,,,

!~~[有一个九位数,它由1到9这9个数组成,每个数字刚好出现一次.这个...
答:{ long i[9];long j, n;i[4] = 5;for (i[0] = 1; i[0] < 10; i[0] += 2){ for (i[1] = 2; i[1] < 9; i[1] += 2){ for (i[2] = 1; i[2] < 10; i[2] += 2){ if (i[2] == i[0])continue;for (i[3] = 2; i[3] < 9; i[3] +=...

是这个吧!~~[有一个九位数,它由1到9这9个数组成,每个数字刚好出现一 ...
答:随便,只要第5位是5

一个九位数,由1-9组成,且第一位不是1,第二位不是2,…,…第九位不是9...
答:8^9=134217728个

一个9位数由1~9这九个数任意排列而成,并且个位数是5,证明它不是整数的...
答:个位数是5 哪就是X*10+5的平方 X是整数 即100x方+100x+25=a a为这个数 用1元2次方程公式 解x=-【4+-2*根号a】除8即X=-【2+1根号a】除4 若命题成立 则x为整数 a为整数。 证:a开放末尾是5 所以根号a+-2 末尾3或7 均不被2整除 所以x不可能是整数 所以命题 不成立 ...

一个九位数,它只由数字1、2和3组成,而且它的任意连续两位数都不等于12...
答:满足前面条件的9位数有177个,满足后面条件的9位数有79个 这个是暴力穷举法:include <stdio.h> include <stdlib.h> void main(){ int i=0,ii=0;char c1,c2;char sarr[9];for(char w1='1';w1<='3';w1++)for(char w2='1';w2<='3';w2++)for(char w3='1';w3<='3';w3++)for...

一个九位数,它只由数字l、2和3组成,而且它的任意连续两位数都不等于12...
答:它的任意连续两位数都不等于12、21、22或31,即1后面可能是1或3,2后面只能是3,3后面可能是2或3.共177个.由以上分析,如果还要求数字1、2和3每个数字都至少出现一次,只能以1开头,111111132;111111323,111111332;111113232,111113232,111113233,111113233…;因此共有:1+2+4+7+12+20+33=...

有一个9个数字的九位数,请问它最大是多少?
答:一、故由1、2得:亿位上的数字为4,万位上的数字为8。由3、4得:亿位之后的数字为3。综上可得:这个九位数最大为:430080000。二、由1、2可得:亿位上的数字为1,万位上的数字为2。由3、4可得:个位为9,十位为3。综上可得:这个九位数最小为:100020039。十进制读数法的法则如下:1、四位...

有一个九位数,它的个位上的数字是期十位上的数字是四,任意相邻的三
答:任意相邻三个数字之和为12,也就是说任意三个相邻数字之和相等,所以这个数字是由一个三位数循环组成的九位数,格式为ABCABCABC,十位上数字是4,所以十位、万位、千万位都是4,个位数字是7,所以个位、千位、百万位都是7,12-4-7=1,所以百位、十万位、亿位都是1,这个数字是147147147 ...

一个九位数,每一位都是0或1,且没有连续的两个1,这样的九位数一共有多 ...
答:一个九位数,每一位都是0或1,显然,第一位必定是1,且没有连续的两个1 一个1,八个0时,100000000,1个九位数:二个1,七个0时,10#0#0#0#0#0#0#,7个#位让一个1插得:C7取1=7个九位数;三个1,六个0时,10#0#0#0#0#0#,6个#位让二个1插得:C6取2=15个九位数;四个...

一个百宝箱的密码是一个九位数且这个数
答:一个百宝箱的密码是一个九位数,这个数的特点是它由九个数字组成,且总和等于9。我们知道九个数字的总和为9,那么这九个数字的平均值为1。由于九个数字都是正整数,所以最小的数字只能是1,而最大的数字只能是9。我们可以进行逐个数字的排列组合。首先确定第一个数字,由于最小的数字是1,我们可以...