| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 838 人关注过本帖
标题:大家好,我是个自学的初学者.
只看楼主 加入收藏
milan国安
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-12-2
收藏
 问题点数:0 回复次数:7 
大家好,我是个自学的初学者.

谁能给我讲讲这几道题.
1,有一种黑色星期五病毒,如果当天是12号,恰逢星期五,那就会发作,试编程求出90年代的病毒发病日期

2,任意给定一个自然数N,寻找一个自然数M,要求M为N的倍数,且他的所有位数都由0或1组成.

3,求符合下面条件的5个正整数
(1),5个数之和为23
(2),5个数中选取不同的数做加法,可得1~23中所有的自然数,打印这5个数,并输出所有的加法式
4,将65535分解成若干个素数之积

[此贴子已经被作者于2006-12-31 22:55:47编辑过]

搜索更多相关主题的帖子: 初学者 自学 
2006-12-31 22:50
zbqf109
Rank: 1
等 级:新手上路
帖 子:289
专家分:0
注 册:2006-12-31
收藏
得分:0 

1.星期五病毒

思路:这个用一个二层循环就可以实现。首先写一个查询某年某月某天是星期几的函数(下面的query函数),然后年做外层循环,月做内层循环。天一直让它是12就行了。如果是星期五,就输出。

//星期五病毒
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int test_leap_year(int year) //测试某年是不是闰年
{
if(year%4==0)
if(year%100!=0)
return 1; //闰年
else if(year%400==0)
return 1; //闰年
else return 0; //非闰年
else return 0;
}

//计算某年1月1日是从1900年开始的第多少天
int calc_day(int year)
{
int i=0;
long int sum=0;
while(i<year-1900)
{
sum=sum+365+test_leap_year(1900+i);
i++;
}
return sum;
}

int query(int year,int month,int day) //返回星期几,0表示星期日
{
char leap_year=0; //闰年标志
char month12[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //记录12个月的天数,默认平年
char i=0;
long int sum=0; //sum记录这天是这年的第几天
leap_year=test_leap_year(year);
month12[1]+=leap_year;
while(i<month-1)
{
sum+=month12[i];
i++;
}
sum+=day;
sum+=calc_day(year);
sum=sum%7;
return sum;
}
int main()
{
int year=1900,month=1,day=12;
int weekday=0;
while(year<2000){
month=1;
while(month<13)
{
weekday=query(year,month,day);
if(weekday==5)
printf("%d %d %d\n",year,month,day);
month++;
}
year++;
}
return 0;
}


坚决不跟用TC的人打交道!
2007-01-01 00:16
zbqf109
Rank: 1
等 级:新手上路
帖 子:289
专家分:0
注 册:2006-12-31
收藏
得分:0 

/*2,任意给定一个自然数N,寻找一个自然数M,要求M为N的倍数,且他的所有位数都由0或1组成.*/
#include <stdio.h>
#include <stdlib.h>

int judge(int number)//judge函数功能:判断一个数是不是由0和1两种数字组成
{
int module=0;//模数,具体到这个例子就是除以10的余数
while(number>1)
{
module=number%10;
number=number/10;
if(module!=0&&module!=1)//module不是0或者1,那么number显然不是由01两种数字组成的
return 0;
}
return 1;
}
int main()
{
int m=0,n=0;
printf("Input m: ");
scanf("%d",&m);
getchar();
n=m;
while(!judge(n))
n+=m;
printf("n=%d\n",n);
return 0;
}


坚决不跟用TC的人打交道!
2007-01-01 00:32
zbqf109
Rank: 1
等 级:新手上路
帖 子:289
专家分:0
注 册:2006-12-31
收藏
得分:0 

第三题有点意思,容我考虑一下。明天上午再说。

/*4,将65535分解成若干个素数之积*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

//首先判断一个数是不是素数
int judge_prime(long int number)
{
int i=2;
while(i<sqrt(number))
{
if(number%i==0)
return 0;//不是素数,返回0
i++;
}
return 1;//素数返回1
}

//求某个数的最小素因子
int prime_factor(int number)
{
int i=2;
while(1)
{
if(number%i==0&&judge_prime(i))//i能被number除尽并且是素数,就是要的结果
return i;
else i++;
}
return i;
}

int main()
{
long int n=65535;
int i=0,j=0,tmp[100]={0};//tmp数组暂存n的印数
while(!judge_prime(n))
{
tmp[i]=prime_factor(n);
n=n/tmp[i];
i++;
}
tmp[i]=n;
printf("65535=");
while(j<=i)
{
if(j==i)
printf("%d\n",tmp[j]);
else printf("%d*",tmp[j]);
j++;
}
return 0;
}

[此贴子已经被作者于2007-1-1 1:00:22编辑过]


坚决不跟用TC的人打交道!
2007-01-01 01:00
love_hcy
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-12-24
收藏
得分:0 

4.将65535分解成若干个素数之积.

#include<stdio.h>
void main()
{
int prime(long int);
long int n=65535,i;
printf("\n");
for(i=2;i<=n;i++)
if(prime&&n%i==0){n=n/i;printf("%ld ",i);} //若在2~n之间存在素数i,则n=n/i,并从n的新值重新寻找素数
}

//判断是否是素数
int prime(long int i)
{
int j,flag=1;
for(j=2;j<=i/2;i++)
if(i%j==0){flag=0;break;}
return(flag);
}

输出结果:3 5 17 257


原来时间真的会不够。原來一切真的都已經來不及。
2007-01-01 06:44
milan国安
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-12-2
收藏
得分:0 

谢谢你哦


e-mail:hemingxin@ 希望能和所有喜爱计算机的人成为好朋友!
2007-01-01 11:05
zbqf109
Rank: 1
等 级:新手上路
帖 子:289
专家分:0
注 册:2006-12-31
收藏
得分:0 

第三题实际上是一个二进制的问题,通过将一个小于23的数,分解成为A=A4A3A2A1A0的格式,那么有A=A0+A1*2+A1*4+A3*8+A4*8, A0~A4只能是0或者1. 可以参考一下2421码或者8421码。程序如下:


#include <stdio.h>

//将一个十进制数用二进制数表示
void dec2bin(int number,int *a)
{
int bin=1,i=0;
for(i=0;i<10;i++)//置所有位为0,以免出错
a[i]=0;
while(number>1)
{
bin=1;i=0;
while(bin<number)//寻找比number小的最大的2的幂
{
bin=bin*2;
i++;
}
if(number==bin)//如果number恰好是2的幂,置该位为1
{
a[i]=1;
number=0;
}
else {//number不是2的幂,减去比它小且最大的2的幂
number=number-bin/2;
a[i-1]=1;
}
}
a[0]=number;//此时number或为0,或为1

}
int main()
{
int i=0,j=0,tmp=0,flag=0,a[5]={1,2,4,8,0}; //5个数,a0~a4
a[4]=23-a[0]-a[1]-a[2]-a[3];
int result[10]={0};
printf("The five numbers are : ");
for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
for(i=1;i<24;i++)//计算1~23
{

flag=0;
dec2bin(i,result);
if(i>15){//i>15,那么置result第五位为1
tmp=i-a[4];//减去最高为的权
dec2bin(tmp,result);
result[4]=1;
}
else dec2bin(i,result);
printf("%d=",i);
for(j=4;j>-1;j--)//输出算式
if(result[j]==1)
{
flag++;//flag纪录result中1的个数
if(flag>1)//除了第一个数,其余数在前面输出一个'+'
printf("+%d",a[j]);
else if(flag==1)//第一个 ,只输出数字
printf("%d",a[j]);
}
printf("\n");
}
return 0;
}


坚决不跟用TC的人打交道!
2007-01-01 11:38
yupeng
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-12-28
收藏
得分:0 

这个编的很好!


理解 *高效* 自信
2007-01-03 11:20
快速回复:大家好,我是个自学的初学者.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024965 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved