| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4854 人关注过本帖
标题:[讨论]第七次编程题目,大家支持一下
取消只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
无玩过界的一行行处理不错.
可以用一空行作为字符串结束的标志.

倚天照海花无数,流水高山心自知。
2007-03-11 20:03
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用crackerwang在2007-3-11 19:57:04的发言:
我也把我的发上来,虽然没有象斑竹那样对输入的函数没有限制,但是其他功能我还是能实现
#include<stdio.h>
#include<conio.h>
void main()
{
int i=0,j;
char a[4][250];
for(j=0;j<4;j++)
a[j][0]='\0';
for(j=0;j<4;j++)
{
i=0;
while(i<250)
{
a[j][i]=getche();
if(int(a[j][i])==13)
{
printf("\n");
a[j][i]='\0';
break;
}
a[j][i+1]='\0';
if(a[j][i]=='@')
{
i=0;
a[j][0]='\n';
}
else if(a[j][i]=='#')
{
if(i==0)
{
a[j][i]='\0';
i=-1;
}
else
{
i-=2;
a[j][i+1]='\0';
}
}
else
;//和哪个匹配,再说空语句还不如不要.
i++;
}
}
printf("\n*************\n");
for(i=0;i<4;i++)
{
for(j=0;a[i][j]!='\0';j++)
{
printf("%c ",a[i][j]);
}
printf("\n");
}
}
希望大家多多指教


倚天照海花无数,流水高山心自知。
2007-03-11 20:20
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
我倒觉得加了会编译出错.语法错误.

倚天照海花无数,流水高山心自知。
2007-03-11 20:37
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用nuciewth在2007-3-11 19:25:16的发言:

干脆把我自己的行编译器程序贴出来,大家帮忙找不足之处.

#include<stdio.h>
#include<string.h>

int main()
{
#ifndef ONLINE_JUDGE
freopen ("hangbianyiqi.txt","r",stdin);
#endif

char c,str[300];
int i=0;
while(EOF!=(c=getchar()))//采取文件输入
{
if(c=='#')
{
if(i>0&&str[i-1]!='\n')
{
i--;//退格
}
}
else
{
if(c=='@')//可以先用一数组保存每一个换行符出现的位置,方便查找。
{

if(i>0)
{
while(str[--i]!='\n');
i++;
}

}
else
{
str[i++]=c;
}
}
}
str[i]='\0';
printf("%s\n",str);
return(0);
}



调式的话请在和程序同目录下建一hangbianyiqi.txt文件,里面输入你要测试的字符串.



倚天照海花无数,流水高山心自知。
2007-03-11 21:16
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
第二个注意一下题意,很容易理解错的.
我给出一部分序列.
{},{1},{3},{1,3},{9},{1,9},{3,9},{1,3,9},{27},{1,27},{3,27},{1,3,27},{9,27},{1,9,27},{3,9,27},{1,3,9,27},{81},{1,81},{3,81},{1,3,81},{9,81},{1,9,81},{3,9,81},{1,3,9,81},{1,27,81},{3,27,81},{1,3,27,81},{9,27,81},{1,9,27,81},{3,9,27,81},{1,3,9,27,81}

倚天照海花无数,流水高山心自知。
2007-03-11 22:58
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
看了一下se7en_enter 的算法大体上和我的差不多.但觉得你在求times这段代码中有点冗余.看能不能再简化一下.

倚天照海花无数,流水高山心自知。
2007-03-12 22:50
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
crackerwang I喜欢c 都写的蛮好.

crackerwang 最好不要写递归,效率低.

I喜欢c 说下qu()的思路.

倚天照海花无数,流水高山心自知。
2007-03-12 22:56
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

贴上我的代码,.刚看过几个高手写的,我都不愿意贴出来的,如果大家要的话,我可以把几个高手写的发上来.

#include<stdio.h>
#include<math.h>
int main()
{
int n,length;
int data[15];

while(EOF!=(scanf("%d",&n))&&n!=0)
{
length=0;
n--;
while(n>0)//根据数据关系,化成二进制
{
data[length++]=n%2;
n/=2;
}
printf("{ ");
if(length!=0)
{
printf("%ld",(long)pow(3,--length));
}
while(--length>=0)
{
if(data[length]==1)
{
printf(", %ld",(long)pow(3,length));
}
}
printf(" }\n");
}
return 0;
}

请大家继续关注...


倚天照海花无数,流水高山心自知。
2007-03-13 20:27
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

以下皆转载,看看别人是怎么写的.

#include <stdio.h>
//Viusal C++ 6.0
#define BIGINT __int64
#define FORMAT "%I64d"
/*
mingw use this macro
#define BIGINT long long
#define FORMAT "%I64d"

linux use this macro
#define BIGINT long long
#define FORMAT "%lld"
*/

BIGINT ThreePower[32];

void HeroNeedThree(BIGINT* subset, BIGINT n)
{
int t, p;
BIGINT m;
m = n-1;
for (t = 0; m; m&=m-1) t++;
p = 0; m = n-1; subset[0] = t;
while (t)
{
if (m & 1) subset[t--] = ThreePower[p];
p++;
m >>= 1;
}
}

int main()
{
int i;
BIGINT n, subset[33];
ThreePower[0] = 1;
for (i = 1; i < 32; i++) ThreePower[i] = ThreePower[i-1]*3;
while (EOF != scanf(FORMAT, &n))
{
HeroNeedThree(subset, n);

printf("{ ");
for (i = 1; i < subset[0]; i++) printf(FORMAT", ", subset[i]);
if (subset[0]) printf(FORMAT" ", subset[subset[0]]);
puts("}");
}
return 0;
}


倚天照海花无数,流水高山心自知。
2007-03-13 21:00
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

typedef long long unsigned INT64;

void HeroNeedThree (INT64* subset, unsigned int n)
{
static INT64 three[41];
static bool ini = false;

if (ini == false) {
INT64 a = 1;
for (int i = 0; i < 41; ++i, a*=3) {
three[i] = a;
}
ini == true;
}

int bitn = 31;
unsigned int mask = (1 << 31);

for (; bitn >= 0 && ((mask&n)==0); --bitn, mask >>= 1);

int amount = 0;
for (int i = 1; bitn >= 0; mask>>=1, --bitn) {
if (n > mask) {
subset[i] = three[bitn];
amount++;
n -= mask;
i++;
}
}
subset[0] = amount;
}
方法:这跟二进制有点关系.


倚天照海花无数,流水高山心自知。
2007-03-13 21:02
快速回复:[讨论]第七次编程题目,大家支持一下
数据加载中...
 
   



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

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