注册 登录
编程论坛 新人交流区

一个算法问题

y29508968 发布于 2007-10-30 23:10, 879 次点击
我想判断一下:6个正整数中至少有2个不为零,包括2个,,算法是什么啊 ,,望高人指点。。谢谢
30 回复
#2
nuciewth2007-10-30 23:14
我一看到算法就跑过来看了.呵呵
你的意思是说6位的整数至多含有2个0的,对不对?
#3
y295089682007-10-30 23:28

谢谢,,不是,,是至多有4个,,呵呵 ,比如:1 1 0 0 0 0 ,这是最多的情况,,0不能多于4个,,是这个意思。。

#4
albert7482007-10-31 08:17
说的不太清楚。。。。。

我猜你的大概意思是把一个数拆分开来判断0的个数对吧?

如果是这样的话给你一个方法

比方说330001

用330001/10的5次方=3.30001,把这个浮点数赋值给整形,这样就可以得到一个3,非零
同样,(330001-3的五次方)/10的四次方,再把这个值赋给整形,同样可以得到一个3,非零

同理判断就可以把大数拆分成个位的数了

这个方法具用一般性

不知道是不是你想要的答案?

[此贴子已经被作者于2007-10-31 8:34:11编辑过]

#5
ddjk2007-10-31 08:24
呵呵,支持一下。
#6
y295089682007-10-31 22:05


不是,,可能是我说的不清楚,,我是想判断6个非负的整数,,不是一个数中的各个位,这6个整数是不相关的,,你说的是判断一个数中有几个是0.



情况是这样的:我获得了6个独立的非负整数,,他们中至少有2个不是0,,我才能使用这6个数,,否则对我来说这6个数就是无效的 ,所以我要判断一下。

比如6个数:1 1 0 0 0 0 就可以满足我的使用要求,因为他们中至少有2个不是0,,而1 0 0 0 0 0 和 0 0 0 0 0 0就不能满足我的使用要求,,不知道这样说您清楚了没有。

#7
为你呼吸2007-10-31 22:26

//刚做的为您解答
#include<stdio.h>
void main()
{
int a,b,c,d,e,f,x,i;
for(x=0;x<=999999;x++)
{ a=x/100000;
b=x%100000/10000;
c=x%10000/1000;
d=x%1000/100;
e=x%100/10;
f=x/10;
i=0;
if(a==0) i++;
if(b==0) i++;
if(c==0) i++;
if(d==0) i++;
if(e==0) i++;
if(f==0) i++;
if(i<=4)
printf("\t%d",x);
}
}

#8
hamsleek2007-10-31 22:48
我想了一个,怎么样:

int a[6];
int count=0;
for (i=0;i<6;i++)
{cout<<"please input the six number:";
cin<<a[i];}//得到这六个数
for(i=0;i<6;i++)
{if(a[i]==0)
count++;
}
if(count<=4)
ruturn 1;
else
ruturn 0;

#9
y295089682007-11-01 21:35
回复:(为你呼吸)//刚做的为您解答#include
不好意思,我说的是6个数,,你说的是判断一个数中的各个位,和我说的不一样,,不过还是谢谢你。。呵呵楼下的解适合我
#10
y295089682007-11-01 21:36
回复:(hamsleek)我想了一个,怎么样:int a[6];int c...
呵呵,谢谢,,我想应该是可以,,谢谢您的答案。意思我已经明白了,关键在那个数组上,。
#11
leecie2007-11-01 21:45
有点意思了...我想我大概知道我首先要去干吗去了...
#12
doudouxiong2007-11-01 21:53

要这么复杂吗?
用一个计数器
在用一个for循环进行比较
或用线性表也可以
重点是比较

#13
米色zip2007-11-01 22:33

同意楼上的观点..

#14
wxhbj2007-11-02 00:55
路过
#15
wxhbj2007-11-02 00:59
路过
#16
cosdos2007-11-02 02:02

#include <stdio.h>

int main(void)
{
int i;
int count = 0; /* 非零数计数器 */
int arr[6];

while(count < 4)
{
for(i = 0; i < 6; i++) /* 用于输入,与验证输入 */
{
if(scanf("%d", &arr[i]) != 1 && arr[i] >= 0)
while(getchar() != '\n')
continue;
}
while(getchar() != '\n')
continue;

for(i = 0, count = 0; i < 6; i++) /* 判断部分 */
{
if(arr[i])
count++; /* 计数器 */
}
}

for(i = 0; i < 6; i++) /* 显示6个数字 */
{
printf("%d, ", arr[i]);
}

putchar('\n');
getchar();
return 0;
}

#17
cosdos2007-11-02 02:06
/* 跟上帖

for(i = 0, count = 0; i < 6; i++) /* 判断部分 */
{
if(arr[i])
count++; /* 计数器 */
}
/*

依次判断数组中的数字,如果是非零,计数器 + 1

使用数组比较方便,不知道搂住这个判断是需要用在什么地方的?
#18
daocaoman2007-11-02 08:35

呵呵

#19
随缘小强2007-11-02 09:12
可以考虑过把数字转换成字符串,然后逐位与0比较,非零启动计数器加1,这样到最后看计数器的值是否大于2也可以
#20
yfcnic2007-11-02 10:40
貌似大家都比较喜欢用c和c++写程序啊,呵呵
#21
nghf2007-11-02 11:15
看懂了.....
#22
y295089682007-11-02 21:21
回复:(cosdos)/* 跟上帖 for(i = 0, count ...

呵呵 ,都 是高手啊 ,,,我 只是想判断一下就 行,,不需要输出这 6 个数,是 工作中用,,满足这个条件的 6 个数我才会要。这样我至一个标志位,我要根据这个标志位再做别的事情,数的输出在另外的地方。还有好像楼上的那个 比较复杂,,看了好久,,还没明白,,哈哈 ,,我的水平比较差。。

#23
y295089682007-11-02 21:25
回复:(cosdos)#include int main...
if(scanf("%d", &arr[i]) != 1 && arr[i] >= 0)
while(getchar() != '\n')
continue

再请问下::continue的用法。。如果while的条件满足的话,,怎么样??请赐教,,呵呵 ,基础不行
#24
yanwu15152007-11-03 11:15

那个计数器的方法很不错的,也是个很绝的方法,以前在其他程序中见过,用的很不错的,是用来判断多个布尔类型的表达式最终的结果的

#25
hunterbin2007-11-03 13:16
不喜欢`我喜欢JAVA
#26
lanhu2007-11-03 13:34

#include <stdio.h>
int main(){
int i=0;
int ar[6];
while(i<=3){
for(int n=0;n<=6;n++){
if(!scanf("%d",arr[n]))
n++;
}
i++;
}
看看这个不知道对不对

#27
洛伊2007-11-03 14:08
学习啊……
#28
Naruto19832007-11-03 14:10

路过,顶一下

#29
hankering2007-11-03 15:14
#30
qiuchengw2007-11-03 21:44
干吗不写个数组,然后从开始依次比较是不是等于0,当等于0的时候计数累加,累加的数字超过4就输出不能,else能用。。
#31
随缘小强2007-11-12 09:40
回复:(y29508968)回复:(cosdos)#include int ma...
continue就是满足条件了,不再执行continue后面的代码了,跳出本轮循环直接执行下一轮循环,而break则是直接跳出while大循环了
1