| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4608 人关注过本帖
标题:[讨论]第五期题目,大家做做.
只看楼主 加入收藏
jiangliehu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-28
收藏
得分:0 
哭啊,好难啊
2007-01-28 10:44
lindongxiao
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-1-28
收藏
得分:0 
偶的第一贴,第一题觉得不是很难,随手写一个。比较懒,只设1-9的序列,大概思路就下面,
我也懒得调试了.
#include <stdio.h>
void permute(char*,int );
int main(int argc, char *argv[])
{

char s[20];
int i;
for(i=0;i<10;i++)
{

permute(s,i);
}

return 0;
}
void permute(char s[],int i)
{

s[i]=i+1+'0';
s[i+1]='\0';
printf("%s",s);
}
2007-01-28 14:24
iwfy
Rank: 1
等 级:新手上路
威 望:2
帖 子:888
专家分:0
注 册:2007-2-23
收藏
得分:0 
第一个的代码,跟 我不是郭靖 斑竹的差不多
#include <stdio.h>
#include <math.h>
main()
{
unsigned long int i,wei,j,n,xh,a,k,kk,zdz; //wei要找的位数
int sz[5],xlxh;
unsigned long int xlsx[5][2]={1,45,11,9045,192,1395495,2893,189414495,38894,2147483647}; //2147445452
printf("input:");
scanf("%ld",&wei);
while(2147483648>wei>0)
{
i=0;
if(wei<46) //如果要找45位以内
{
printf("wei=%ld\n",wei);
for(n=1,xh=1;xh<=wei;n++) //n=1--9
{
for(k=1;k<=n;k++) //k=1-n
{
if(xh==wei)
{
printf("%d\n",k);
xh=xh+1;
break;
}
else xh=xh+1;
}
}
}
else //45位以上
{
for(a=0;wei>=xlsx[a][1];a++); //找到wei在1-5位数的哪个序列里,a=1在10位数的序列里
wei=wei-xlsx[a-1][1]; //wei-a位数序列总长度
zdz=(int)pow(10,a); //zdz=a位数最小值
for(n=0,k=0;n<9*zdz;n++)
{
if((i+xlsx[a][0]+k)>wei) //在a位数里找到序列位数包括wei的并把值等于j
{
j=n+zdz;
wei=wei-i;
break;
}
else
if(i==wei)
{
printf("%d\n",n%10);
break;
}
else
{
i=i+xlsx[a][0]+k;
k=k+a+1;
}
}
if(wei<10) //1--j的序列中第wei位
printf("%ld\n",wei);
else //wei在10位后
{
a=9;
for(k=10;k<=j;k++) //k从10开始到j
{
a=a+1;
kk=k; //因为k是两位在序列中占两位
xlxh=0;
while(kk!=0) //kk=k,分解kk
{
sz[xlxh]=kk%10;
xlxh=xlxh+1;
kk=(int)kk/10;
}
xlxh=xlxh-1; //xlxh代表分了几位
while(xlxh>=0) //判断哪一位是要找的数字
{
if(a==wei)
{
printf("%d\n",sz[xlxh]);
j=0;
a=a+1;
break;
}
else
{
xlxh=xlxh-1;
if(xlxh>=0)a=a+1;
else break;
}
} //kk判断完毕
}
} //wei大于56
} //找到所找的位数结束
printf("input:");
scanf("%ld",&wei);
if(wei<1 || wei>2147483647){printf("chaochufanwei!"); exit(0);}
} //while循环输入结束
}

英语不好还想学编程??逆天之路,不由分说!! 数学太差还想学编程??离经叛道,义无返顾!!
2007-03-10 09:03
zgwxwn
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-4-24
收藏
得分:0 

第一题答案:
# include <stdio.h>
# include <math.h>
static __int64 a[] = {1,11,192,2893,38894,488895};
static __int64 b[] = {45,9000,1386450,188019000,23750235000};
static __int64 c[] = {1,10,100,1000,10000,100000};
static __int64 d[] = {9,180,2700,36000,450000,5400000};

int main()
{
int t, i;
__int64 tmp, an, n;

scanf("%d",&t);
while(t--)
{
scanf("%I64d",&tmp);
i = 0;
while(tmp > b[i])
tmp -= b[i++];
an = a[i];
while(tmp > an)
{
tmp -= an;
an += i+1;
}
i = 0;
while(tmp > d[i])
tmp -= d[i++];
n = (tmp-1) / (i+1);
tmp -= n*(i+1);
n += c[i];
n /= c[i+1-tmp];
printf("%I64d\n",n%10);
}
return 1;
}


coding & enjoying
2007-03-10 09:43
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
我的第一题目:
#include<stdio.h>
#include<math.h>
int find(int x,int y)
{
int i=1;
while(y--)
{
x/=i;
i*=10;
}
x%=10;
return x;
}
int digit(int x)
{
int flag=1;
while(pow(10,flag)<=x)flag++;
return flag;
}
void main()
{
int n,i,j,k,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
k=0;
i=1;
j=1;
while(n>=i)
{
n-=i;
j++;
k=digit(j);
i+=k;
}
if(n==0)
printf("%d\n",(--j)%10);
else
{
j=1;
k=1;
while(n>=k)
{
n-=k;
j++;
k=digit(j);
}
if(n==0)
printf("%d\n",(--j)%10);
else
printf("%1d\n",find(j,k-n+1));
}
}
}

2007-04-08 10:16
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 

见鬼的是输入数据不够大的时候我的结果和其他人都一样.但是超过11位就有问题了
把所有的int都改成unsigned long都不好使


2007-04-08 11:01
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 

那为什么其他人用的也是unsigned 能过呢?


2007-04-08 15:20
jiangliangju
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-3-9
收藏
得分:0 
第二个题目很难的#include <stdio.h>
#include <math.h>
main()
{
long n;
double x;
printf("Please input a positive integer:");
while(scanf("%ld",&n))
{ if(n<=0)
printf("Error input!");
else
{
if(n%2==0||n==1)
printf("2^? mod %d = 1\n",n);
else
{
for(x=2;;x++)
if((int)pow(2,x)%n==1)
{
printf("2^%.0f mod %ld = 1\n",x,n);
break;
}
}
}
}
system("pause");
}
这是我写的,但是如果N=233我的程序出不了结果!请大家指教一下
2007-04-09 13:10
jiangliangju
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-3-9
收藏
得分:0 

第二题强,这样都被你做出来了

2007-04-09 17:32
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
既然大家这么有兴趣.我也做了一下第二个

#include<stdio.h>
void main()
{
long n,k,flag,l;
while(scanf("%ld",&n)!=EOF)
{
k=1;
l=0;
while(k<n)
{
k*=2;
l++;
}
flag=k%n;
k%=n;
while(1)
{
if(k==1)
{
printf("2^%ld mod %ld = 1\n",l,n);
break;
}
else
{
k*=2;
l++;
k%=n;
if(k==flag)
{
printf("2^? mod %ld = 1\n",n);
break;
}
}
}
}
}

2007-04-09 20:32
快速回复:[讨论]第五期题目,大家做做.
数据加载中...
 
   



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

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