| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6131 人关注过本帖
标题:[讨论]第二期题目,大家做做.
只看楼主 加入收藏
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
收藏
得分:0 

第一题的:

程序代码:
#include <stdio.h>
#include <malloc.h>

typedef unsigned long UL;

UL *Lcm;

UL lcm(UL m,UL n)
{
UL t=n,m1=m,n1=n;
if(m>n)
{
t=m;
m=n;
n=t;
}
while(n%m!=0)
{
t=n;
n=m;
m=t%m;
}
return m1*n1/m;
}

void l(UL *p,UL t)
{
UL n=p[0];
UL i;
for(i=1;i<=n;i++)
Lcm[t]=lcm(Lcm[t],p[i]);
printf(\"%ld\n\",Lcm[t]);
}

int main()
{
UL i,j,m,n;
char g;
UL **num;
printf(\"**********INPUT***********\n\");
scanf(\"%ld\",&n);
num=(UL**)malloc(sizeof(UL*)*n);
Lcm=(UL*)malloc(sizeof(UL)*n);
for(i=0;i<n;i++)
Lcm[i]=1;
for(i=0;i<n;i++)
{
m=0;
while((g=getchar())!=' ')
{
if(g==10)
continue;
m=(g-'0')+m*10;
}
num[i]=(UL*)malloc(sizeof(UL)*(m+1));
num[i][0]=m;
for(j=1;j<=num[i][0];j++)
{
m=0;
while((g=getchar())!=' ')
{
if(g==10)
break;
m=(g-'0')+m*10;
}
num[i][j]=m;
}
}
printf(\"**********OUTPUT**********\n\");
for(i=0;i<n;i++)
l(num[i],i);
free(num);
free(Lcm);
getch();
}


2006-11-20 15:18
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
收藏
得分:0 
以下是引用cwande在2006-11-19 16:41:10的发言:
第二题:
[CODE]#include<stdio.h>
#include<string.h>
const int M=10000;
char a[M];
int main()
{
int i,len,sum;
while(gets(a),a[0]!='0')
{
sum=0;
for(i=0,len=strlen(a);i<len;i++)
sum+=a[i]-48;
if(sum>9)sum%=9;
if(sum==0)sum=9;
printf("%d\n",sum);
}
return 0;
}[/CODE]

C没有const int.......
还是用#define吧


2006-11-20 15:26
meiling01
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-11-2
收藏
得分:0 
以下是引用我不是郭靖在2006-11-19 16:47:40的发言:

#include<stdio.h>
#define M 200
#define N 5000
long lcm(long m,long n)
{
long t,m1=m,n1=n;
if(m>n)
{
t=m;
m=n;
n=t;
}
while(n%m!=0)
{
t=n;
n=m;
m=t%m;
}
return m1/m*n1;
}
int main()
{
long i,j,n,a[M][N];
scanf("%ld",&n);
for(i=0;i<n;i++)
{
scanf("%ld",&a[i][0]);
for(j=1;j<=a[i][0];j++)
scanf("%ld",&a[i][j]);
}
for(i=0;i<n;i++)
{
long temp=1;
for(j=1;j<=a[i][0];j++)
temp=lcm(temp,a[i][j]);
printf("%ld\n",temp);
}
return 0;
}


to: 我不是郭靖
根据您的程序,我写了一段程序如下:但是总是不能运行,麻烦您帮我找一下好吗?谢谢您
#include<stdio.h>
#define U 20
#define V 50
int lcm(int m,int n)
{
int t,r,m1,n1;
m1=m;
n1=n;
if(m>n)
{
t=m;m=n;n=t;
}
while(n%m!=0)
{
r=n%m;
n=m;
m=r;
}
return m1*n1/r;
}
void main()
{
int a[U][V];
int i,j,n;
int temp=1;
printf("please input hangshu:\n");
scanf("%d\n",&n);

for(i=0;i<n;i++)
{
scanf("%d ",&a[i][0]);
for(j=1;j<=a[i][0];j++)
scanf("%d ",&a[i][j]);
}

for(i=0;i<n;i++)
{
for(j=1;j<=a[i][0];j++)
temp=lcm(temp,a[i][j]);
printf("%d\n",temp);
}

}

2006-11-20 15:26
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 
以下是引用cwande在2006-11-19 16:41:10的发言:
第二题:
[CODE]#include<stdio.h>
#include<string.h>
const int M=10000;
char a[M];
int main()
{
int i,len,sum;
while(gets(a),a[0]!='0')
{
sum=0;
for(i=0,len=strlen(a);i<len;i++)
sum+=a[i]-48;
if(sum>9)sum%=9;
if(sum==0)sum=9;
printf("%d\n",sum);
}
return 0;
}[/CODE]

如果输入的不是数字字符呢,运行结果不会正确了
若a[0]='0' 就不会进入while循环
判断sum是否为0 不是多余的吗
还有,为什么sum为0时,输出9?

你的程序的意思是这样的吧

#include <stdio.h>
main()
{
long n;
printf("please input a number : ");
sacnf("%ld",&n);
n%=9;
printf("the result is %ld \n", n);
}


片言可以明百意 坐驰可以役万里
2006-11-20 15:35
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
以下是引用perfect在2006-11-20 15:35:50的发言:

如果输入的不是数字字符呢,运行结果不会正确了//输入一个数难道还有非数字字符?
若a[0]='0' 就不会进入while循环 //输入结束的标志就是0
判断sum是否为0 不是多余的吗 //因为结果不可能为0
还有,为什么sum为0时,输出9?

你的程序的意思是这样的吧

#include <stdio.h>
main()
{
long n;
printf("please input a number : ");
sacnf("%ld",&n);
n%=9;
printf("the result is %ld \n", n);
}
你认为n肯定小于2^32吗,题目可没说,
要是输入11111111111111111111111111111111111111,
能得出正确结果吗......




汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-11-20 15:50
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 
以下是引用zhanghuan_10在2006-11-19 17:03:46的发言:

第二题!呵呵!这方法可不是我想出来的!
#include<stdio.h>

int main(void)
{
char str[10];
int num = 0, i;

gets(str);
for(i = 0;i < 2;i ++)
{
num += str[i] - '0';
}
while(num > 10)
{
num = num/10 +num%10;
}
printf("%d\n", num);

return 0;
}

这个程序的意思和上个程序一样啊
比如 123
上个程序
123=100+20+3
100%9=1 20%9=2 3%9=3
(1+2+3)%9=6

这个
123=12+3=15=1+5=6
其中
12=10+2
10%9=1 2%9=2
可见,在这个题目中12和120一样,与后面的0没有关系

不如用%9,这样更简单


片言可以明百意 坐驰可以役万里
2006-11-20 15:56
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 

你知道sum不可能为0,还判断干什么啊
虽然输入数字一般不会有其它字符,但也是一个漏洞啊


片言可以明百意 坐驰可以役万里
2006-11-20 15:59
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 

你把那句去掉,输入18试试..............


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-11-20 16:03
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 

对啊,是我错了,果然厉害啊
没考虑全,以后请多多指较
应该改成这样

#include <stdio.h>
main()
{
long n;
printf("please input a number : ");
sacnf("%ld",&n);
if(n!=0)
{
n%=9;
if(n==0) printf("the result is 9\n");
}
printf("the result is %ld \n", n);
}

不过你的程序如果一开始就输入0呢,什么提示也没有就结束了,别人怎么知道是什么情况啊
若错误的输入了字符呢
真的输入的数字很大的话,比如输入10000个9,那么sum=90000,溢出了
如果真的很大,可以把一个大数分成几位几位的数,再用循环解决就行了,不过好像没那个必要吧


片言可以明百意 坐驰可以役万里
2006-11-20 18:17
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
以下是引用perfect在2006-11-20 18:17:19的发言:

对啊,是我错了,果然厉害啊
没考虑全,以后请多多指较
应该改成这样

#include <stdio.h>
main()
{
long n;
printf("please input a number : ");
sacnf("%ld",&n);
if(n!=0)
{
n%=9;
if(n==0) printf("the result is 9\n");
}
printf("the result is %ld \n", n);
}

不过你的程序如果一开始就输入0呢,什么提示也没有就结束了,别人怎么知道是什么情况啊
若错误的输入了字符呢
//偶只针对这个题目的输入来说,并假设输入是合法的,所以不考虑这些情况.
真的输入的数字很大的话,比如输入10000个9,那么sum=90000,溢出了
//vc的int是32位的,等同于long,不会溢出..
如果真的很大,可以把一个大数分成几位几位的数,再用循环解决就行了,不过好像没那个必要吧


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-11-20 18:41
快速回复:[讨论]第二期题目,大家做做.
数据加载中...
 
   



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

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