Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2072832
  • 博文数量: 470
  • 博客积分: 10206
  • 博客等级: 上将
  • 技术积分: 5620
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-03 12:50
文章分类

全部博文(470)

文章存档

2012年(1)

2011年(18)

2010年(47)

2009年(404)

分类:

2009-06-08 09:05:22

[] [] [] [] []
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 09:06 
给1~N的每一个数字标记一种颜色,使得其中任意两个数字A,B,如果A可以整除B,则A和B必须标记不同的颜色,要求所使用的颜色最少,并得到1~N的每一个数字所标记的颜色(用数字表示)。请编写程序解决这个问题。

例子:

输入:(1<= N <=10000)

16

输出:

5

1 2 2 3 2 3 2 4 3 3 2 4 2 3 3 5

[ 本帖最后由 greendays 于 2009-6-5 09:12 编辑 ]



您对本贴的看法:
| | |

精灵
Linux初学者



CU编号: 748015
注册:2008-8-19
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 09:09 
关注中

ing......



您对本贴的看法:
| | |
  帅哥 (Tim)
法师


CU奥运火炬传递手2008
CU编号: 465018
注册:2006-9-13
最后登录: 2009-06-08
帖子:
精华:0







来自:长春
状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 09:31 
回复 #1 greendays 的帖子

这个题目应该用分解质因式的方法来做:
首先,1 肯定能被任意数整除,所以单独分配一个颜色,编号1
其次,所有的质数分配一个颜色,编号2
最后,对所有的合数分解质因式,颜色编号为 质因子的个数+1

感觉应该是这样。并没有证明。



您对本贴的看法:

__________________________________

记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
| | |
  帅哥 (HH)
光明使者
学习一点,进步一点



CU编号: 546387
注册:2007-4-2
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 09:39 
关注,哪位高手来挑战下



您对本贴的看法:

__________________________________

Linux centos 2.6.18-92.el5
| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 09:41 
回复 #3 ly5066113 的帖子

Very Good!!!



您对本贴的看法:
| | |

精灵




CU编号: 1127759
注册:2009-3-16
最后登录: 2009-06-07
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 09:59 
你面试的啥职位,怎么有那么怪异的题?



您对本贴的看法:
| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 10:02 
回复 #6 小木虫子 的帖子

运维实习工程师。

[ 本帖最后由 greendays 于 2009-6-5 10:04 编辑 ]



您对本贴的看法:
| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 10:19 
try:

CODE:
./color 16

color:

CODE:
#!/bin/bash

a[1]=1
for (( i=2;i<=$1;i++))
do for (( j=1;j do
  if ((i%j ==0));then a[i]=$((a[j]+1));fi
done
done

for (( i=1;i<=$1;i++))
do printf "%s " ${a[i]}
done
printf "\n"

改正:
color:

CODE:
#!/bin/bash

a[1]=1
for (( i=2;i<=$1;i++))
do for (( j=i-1;j>0;j--))
   do  if (( i%j == 0 ));then a[i]=$((a[j]+1));break;fi
   done
done

for (( i=1;i<=$1;i++))
do printf "%s " ${a[i]}
done
printf "\n"

[ 本帖最后由 blackold 于 2009-6-5 10:51 编辑 ]



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥 (Tim)
法师


CU奥运火炬传递手2008
CU编号: 465018
注册:2006-9-13
最后登录: 2009-06-08
帖子:
精华:0







来自:长春
状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 10:32 
回复 #3 ly5066113 的帖子



CODE:
#! /bin/bash

isprime()
{
        flag=0
        n=$1

        for((j=0;j<${#prime[@]};j++))
        do
                if [ $((n%${prime[$j]})) -eq 0 ]
                then
                        flag=1
                        break
                fi
        done

        return $flag

}

splitprime()
{
        num=$1
        primenum=0

        while [ $num -gt 1 ]
        do
                for((k=0;k<${#prime[@]};k++))
                do
                        if [ $((num%${prime[$k]})) -eq 0 ]
                        then
                                num=$((num/${prime[$k]}))
                                ((primenum++))
                                break
                        fi
                done
        done

        echo $((primenum+1))
}

for((i=1;i<=$1;i++))
do
        if [ $i -eq 1 ]
        then
                echo 1
        else
                if isprime $i
                then
                        prime[${#prime[@]}]=$i
                        echo 2
                else
                        echo $(splitprime $i)
                fi
        fi
done




您对本贴的看法:

__________________________________

记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
| | |

精灵王
精灵王?



CU编号: 199500
注册:2004-11-15
最后登录: 2009-06-07
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 10:33 
我猜楼上2位的薪资大概在1W-1.5W左右



您对本贴的看法:

__________________________________

正则 shell买什么书好?
来这里混混,2个月速成班,还不收费!

| | |
[] [] [] [] []

精灵
Linux初学者



CU编号: 748015
注册:2008-8-19
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 10:35 
太深了,水平不够



您对本贴的看法:
| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 10:40 
回复 #8 blackold 的帖子

excellent ! ! ! You have got it  !  Thank you very much!

[ 本帖最后由 greendays 于 2009-6-5 13:42 编辑 ]



您对本贴的看法:
| | |

圣骑士



CU编号: 659419
注册:2008-1-3
最后登录: 2009-06-08
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 10:40 


CODE:
[root@0609-0087 ~/cafe/sh-script]# cat puzzle.sh
#!/bin/sh

typeset -a arr
for((i=1; i <= "$1"; i++))
do
  unset ele_arr
  typeset -a ele_arr
  for((j=1, k=1; j < "$i"; j++))
  do
    if(( "$i" % "$j" == 0))
        then
        if [[ $k -gt 1 && ${ele_arr[$k-1]} -gt ${arr[$j]} ]]
            then
            ele_arr[$k]=${ele_arr[$k-1]}
            ele_arr[$k-1]=${arr[$j]}
            else
            ele_arr[$k]=${arr[$j]}
        fi
        ((k++))
    fi
  done

  if [[ ${#ele_arr[@]} -gt 0 && "${ele_arr[1]}" -gt 1 ]]
      then
      arr[$i]=1
      continue
  fi
  flag=1
  m=1
  for((; m < ${#ele_arr[@]}; m++))
    do
    if(( ${ele_arr[$m+1]} - ${ele_arr[$m]} > 1))
        then
        arr[$i]=$((${ele_arr[$m]} + 1))
        flag=0
        break
    fi
  done
  if((flag == 0))
      then
      continue
  fi
  arr[$i]=$((${ele_arr[m]}+1))
done

for((i=1; i <= "$1"; i++))
do
  echo -n ${arr[$i]}" "
done
echo




您对本贴的看法:

__________________________________

perl -e 'print "\x{000a}\x{000a}\x{263a}\x{3000}\x{597d}\x{4e45}\x{4e0d}\x{89c1}\x{ff0c}\x{4f60}\x{8fd8}\x{597d}\x{5417}\x{ff1f}\x{263a}\x{000a}\x{000a}"' 2>&-
| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 10:43 
回复 #9 ly5066113 的帖子

brilliant !!! You have got it !    Thank   you  so much ! ! !



您对本贴的看法:
| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 10:46 
回复 #13 lululau 的帖子

brilliant !!! You get  it ,too ! !    Thank   you  ! ! !

[ 本帖最后由 greendays 于 2009-6-5 10:49 编辑 ]



您对本贴的看法:
| | |
  帅哥
大天使




CU编号: 804020
注册:2009-1-17
最后登录: 2009-06-08
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 12:20 
回复 #1 greendays 的帖子

我用的C。。。

CODE:
1 #include
  2
  3 int yinzi(int n){
  4         int i,num=1,j=0;
  5         for(i=2;i<=n;i++){
  6                 while(n%i==0){
  7                         n=n/i;
  8                         j++;
  9                 }
10                 num+=j;
11                 j=0;
12                 if(n 13         }
14         return num;
15 }
16
17 int main(void)
18 {
19         int num,i=0;
20         scanf("%d",&num);
21         for(i=1;i<=num;i++)
22                 printf("%d ",yinzi(i));
23         printf("\n");
24         return 0;
25 }




您对本贴的看法:

__________________________________



喜欢犯错误,渴望被批判。
| | |
  帅哥 (春之风)
大天使




CU编号: 110253
注册:2003-11-7
最后登录: 2009-06-07
帖子:
精华:







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 12:54 
我的算法是:
用一个数组来保存数,每个数组的元素保存的是可以使用同种颜色的数字

CODE:
#!/bin/bash
N=10
[ -n "$1" ] && N=$1
C=()
for((i=1;i<=N;i++))
do
    for((j=0;j<${#C[*]};j++))
    do
        MATCH=0
        for k in ${C[$j]}
        do
            [ $((i%k)) -eq 0 ] && MATCH=1 && break
        done
        [ $MATCH -eq 0 ] &&  break
    done
    C[$j]="${C[$j]} $i"
    echo -n "$((j+1)) "
done
echo -e "\nTotal colors is ${#C[*]}"




您对本贴的看法:

__________________________________

Debian(lenny)
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
GNU Awk 3.1.5
GNU sed version 4.1.5
GNU grep 2.5.3
| | |

大天使



CU编号: 347943
注册:2005-12-11
最后登录: 2009-06-07
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 12:57 
进来学习



您对本贴的看法:

__________________________________

shell新手&&awk新手
http://blog.chinaunix.net/u3/91453/


| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 18:14 
回复 #10 xiaobaibbb 的帖子

没有你想象的那么好!



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |

侠客




CU编号: 1216461
注册:2009-3-26
最后登录: 2009-06-05
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 21:01 
我觉得3楼的那个算法有问题:(几个怀疑的地方)
1:你如果说1是因为只有质因数1所以分配1的话; 2是因为只有质因数1和2而分配2的话; 4是因为有质因数1,2和4而分配3的话。   那么我的意见就是那如果是6怎么说呢?它有1,2,3和6四个质因数!~~~~
2:同样的道理就是还有12,15。



您对本贴的看法:
| | |
阅读(823) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~