大饼先生 2006-8-18 23:16
活动贴~~编程有奖问答!!(12月12号更新,关于输入输出的)
[align=center][b]FAQ[/b][/align]
[color=#ff00ff]为了活跃论坛气氛和增加大家对编程的兴趣,特在编程设计版块开了一个编程挑战贴,欢迎大家来一试身手!不定期更新~~随着高手的增多,题目的难度也会慢慢的增大,论坛分奖励也会越来越多哦!!!
同时如果大家在编程过程中碰到的难题(不限语言!只要是跟计算机编程相关就行),也可以发短消息给我,我将考虑把你的问题作为一个挑战发表在该贴子上面,让各路高手帮大家解决~~~
没想到论坛分奖励这么好得吧?比苦心积虑发表一篇精华贴容易得多了!快来参加吧!!!![/color]
PS:灌水免入~
*********************我是郁闷的分割线************************
有一个文本文件记录了一些单词,如下所示~
现在要求编一个程序,将下面这段看上去杂乱的文本转换一下,使每个单词都占一行~~
[quote]envisage v.想像,设想 2.正视,面对 tumour /tumor n.(c)(肿)瘤,肿块 abdomen n.腹,下腹(胸部到腿部的部份) abound v.充满,富于 acclaim v.向…欢呼,公认 n.欢呼,喝彩,称赞 accord vt.使一致,给予 accountant n.会计,会计师 addict vt.使沉溺,使上瘾 n.上瘾者 adore v.崇拜,热爱 advent n.出现,到来 adverse a.不利的,敌对的,相反的 affluent adj.富裕的[/quote]
要求结果类似于下面:
[quote]
envisage v.想像,设想 2.正视,面对
tumour /tumor n.(c)(肿)瘤,肿块
abdomen n.腹,下腹(胸部到腿部的部份)
……
[/quote]
-------------------------------------------------下面是以前的题----------------------------------------------------------
第三题已经由“西北望·射天狼”给出了一个答案,得分很容易吧~~~大家要加油哦~~
下面给出第四题。编程题,实现语言不限,可以JAVA C C++ VB等等~,:
[b]悬赏分[/b]:
能按要求输出的给出的得10分!实现算法大家公认最好的给20分!!
有一个大点的文本文件(大于等于10000000字节),请你将该文本文件回显到标准输出里。
使用时间最短的程序给20分。半天程序没反应的不给分。。。
-------------------------------------------------------------------------------------------------------------------------
*********************************我是无敌分割线**************************************
第四题 分值50分!!!
题目如下:
百度语言翻译机(来自百度之星程序设计大赛,原题要求C实现,我们这里不做语言要求~)
百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套独特的缩略语。他们在平时的交谈、会议,甚至在各种技术文档中都会大量运用。
为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩略语和专有名词翻译成日常语言。
输入要求:
输入数据包含三部分:
1. 第一行包含一个整数N(N<=10000),表示总共有多少个缩略语的词条;
2. 紧接着有N行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩略语(仅包含大写英文字符,长度不超过10字节),第二个字符串为日常语言(不包含空格,长度不超过255字节);
3. 从第N+2开始到输入结束为包含缩略语的相关文档(总长度不超过1000000个字节)。例:
6
PS 门户搜索部
NLP 自然语言处理
PM 产品市场部
HR 人力资源部
PMD 产品推广部
MD 市场发展部
百度的部门包括PS,PM,HR,PMD,MD等等,其中PS还包括NLP小组。
输出要求:
输出将缩略语转换成日常语言后的文档。(将缩略语转换成日常语言,其他字符保留原样)。例:
百度的部门包括门户搜索部,产品市场部,人力资源部,产品推广部,市场发展部等等,其中门户搜索部还包括自然语言处理小组。
***************************************************************************************
下面是第二题:
[b]悬赏分[/b]:5分!
改错题:(说明错在何处,为什么错了,应该怎么改)
这个就是个送分题了!!只要按程序预想的输出"s.doSomething() returns Do something ..."就可以了~~
[quote]
public class Something {
public static void main(String[] args) {
Something s = new Something();
System.out.println("s.doSomething() returns " + doSomething());
}
public String doSomething() {
return "Do something ...";
}
}[/quote]
------------------------------------------下面这题已经在5楼给出答案-----------------------------------------------
[b]悬赏分[/b]:5分!
改错题:(说明错在何处,为什么错了,应该怎么改)
abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
}
[[i] 本帖最后由 大饼先生 于 2006-12-12 10:38 编辑 [/i]]
kaka0040 2006-8-19 07:50
abstract里面应该不允许有private型的变量与方法吧 因为它要给人去实现并且访问的
还有那个boolean布尔加在这里是什么意思,是返回值类型么
到数第二行应该有个分号;
public abstract boolean isStupidName(String name) {}中的String name是不是不应该有String name
我刚刚学,发现这些,其实自己也不敢肯定
黑色魔术师 2006-8-19 08:25
照一般的情况来说,最后那个分号可以不用写.不会出错的.大饼的前面给出的编程都是这样,所以这个不算是错误.
完全不会编程的人飘过~~~~~~~
大饼先生 2006-8-19 08:44
[quote]原帖由 [i]kaka0040[/i] 于 2006-8-19 07:50 发表
abstract里面应该不允许有private型的变量与方法吧 因为它要给人去实现并且访问的
还有那个boolean布尔加在这里是什么意思,是返回值类型么
到数第二行应该有个分号;
public abstract boolean isStup ... [/quote]
抽象类里是可以有private型的变量与方法的~~只不过抽象方法不能定义成private,因为抽象方法是等别的类来继承这个抽象类然后实现~~~
boolean是返回值
倒数第二行确实应该有个分号~
但是你没有完全答对哦~~
kaka0040 2006-8-19 23:08
我再来蒙一下哈
抽象方法都默认是静态跟公有的
private String name是实例型的私有变量
静态方法是不能调用实例型变量的
大饼先生 2006-8-20 15:45
[quote]原帖由 [i]kaka0040[/i] 于 2006-8-19 23:08 发表
我再来蒙一下哈
抽象方法都默认是静态跟公有的
private String name是实例型的私有变量
静态方法是不能调用实例型变量的 [/quote]
你该去复习下抽象类啦~~~
抽象类跟别的一般类不同的是因为“抽象类包含抽象方法~~”
就是说如果类里面有抽象方法,该类就必须被定义成抽象类~~
抽象方法要么由子类继承后实现,要么该子类也是抽象类,再由子类的子类继承。
抽象方法在抽象类里面只是申明,并不要实现,如果实现抽象方法的话编译器会报错~而上面的源码中那对花括号就是实现了抽象方法!!(虽然里面没有代码,但有花括号就表示该方法已经被实现了~)所以错误就在这里了~~~~
正确的改法是把花括号去掉后加分号!
kaka0040 2006-8-20 22:42
其实我也不是抽象类没搞清楚
我没了解一个空的括号就可以代表方法的实现
西北望·射天狼 2006-8-27 20:09
这个题确实好简单。。。
方法一:把doingSomething()方法改成静态的。
方法二:把调用方式改成s.doingSomething()
大饼先生 2006-8-27 20:11
[quote]原帖由 [i]西北望·射天狼[/i] 于 2006-8-27 20:09 发表
这个题确实好简单。。。
方法一:把doingSomething()方法改成静态的。
方法二:把调用方式改成s.doingSomething() [/quote]
回答正确!呵呵,给加分啦~~
网络幽灵 2006-9-1 20:59
第一题
#include<iostream.h>
#include<process.h>
void f(int n)
{
int i,j,s=1,t;
for(i=2;i<n+2;i++)
{
t=s;
for(j=i;j<n+2;j++)
{
cout<<t<<' ';
t=t+j;
}
s=s+i-1;
cout<<endl;
}
}
int main()
{
int n;
cout<<"input a number:";
cin>>n;
f(n);
system("pause");
return 0;
}
大饼先生 2006-9-2 08:17
10楼给出了一个正解~加10分!
还有没有其它解法呀各位?
在实现后可以考虑下算法的复杂度
丹皮儿 2006-10-4 10:12
刚才把这些给我隔壁我朋友稍微看了一下 貌似他都懂 果然是信工院的牛人 怪不得5000底薪/月+公司解决北京户口 这样的公司他都不去 ~~~赞一个先!
魔鬼筋肉人 2006-10-20 13:43
java实现:
import java.io.*;
import java.util.*;
import java.util.regex.*;
public class Translation {
private Reader in = null;
private int lineCount = 0;
private HashMap map = null;
private String contents = null;
public Translation(String path){
try {
in = new FileReader(path);
map = new HashMap();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public void parseFile(){
BufferedReader reader = new BufferedReader(in);
String line = null;
String key, value;
try {
lineCount = Integer.parseInt(reader.readLine());
for(int i=0;i<lineCount;i++){
line = reader.readLine();
int tmp = line.indexOf(" ");
key = line.substring(0,tmp);
value = line.substring(tmp+1);
map.put(key, value);
}
String temp;
StringBuffer sb = new StringBuffer();
while((temp=reader.readLine())!=null){
sb.append(temp).append("\n");
}
contents = sb.toString();
//System.out.println(contents);
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
}
private boolean isLetter(char c){
if(Character.isLowerCase(c) || Character.isUpperCase(c))
return true;
else return false;
}
public void formatContents() throws Exception{
parseFile();
char[] content = contents.toCharArray();
int endPos=0,i=0;
StringBuffer sb = new StringBuffer();
while(i<content.length){
if(isLetter(content[i])){
sb.append(content[i]);
i = i+1;
while(isLetter(content[i])){
sb.append(content[i]);
i++;
}
endPos = i;
String key = sb.toString();
contents = contents.replaceFirst(key, (String)map.get(key));
sb = new StringBuffer();
}else i++;
}
}
public static void main(String[] args){
Translation t = new Translation("d:\\temp\\in.txt");
try{
t.formatContents();
}catch(Exception e){
e.printStackTrace();
}
System.out.println(t.contents);
}
}
网络幽灵 2006-11-23 14:59
我来做一下这个题
悬赏分:
能按要求输出的给出的得10分!实现算法大家公认最好的给20分!!
有一个大点的文本文件(大于等于10000000字节),请你将该文本文件回显到标准输出里。
使用时间最短的程序给20分。半天程序没反应的不给分。。。
我自己写了两种实现方法,并做了比较
编程步骤:
1:使用vs2003.net(vs6.0也可以)
2:新建立一个名叫WriteToConsole的win32控制台项目
3:项目属性->c++->代码生成->运行时库,把单线程改成多线程.
为了编程方便,省去输入步骤,一直从data.txt文件输入.
源代码:
stdafx.h////////////////////////////////////////////////////
// stdafx.h : 标准系统包含文件的包含文件,
// 或是常用但不常更改的项目特定的包含文件
//
#pragma once
#include <iostream>
#include <tchar.h>
// TODO: 在此处引用程序要求的附加头文件
#include<stdio.h>
#include<windows.h>
#include<process.h>
WriteToConsole.cpp////////////////////////////
// WriteToConsole.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
using namespace std;
UINT WINAPI AssistantThread(LPVOID pvParam)//用来计算时间
{
while(1)
{
(*((UINT*)pvParam))++;
Sleep(1000);
}
return 0;
}
void UseStdio()
{
FILE* f;char buf[1024],c=0;
f=fopen("data.txt","r");
setbuf(f,buf);;
while(c!=EOF)
{
c=getc(f);
cout<<c;
}
fclose(f);
}
void UseMapFile()
{
HANDLE hFile=CreateFile("data.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
HANDLE hFileMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
char* p=(char*)MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0);
cout<<p;
UnmapViewOfFile(p);
CloseHandle(hFileMapping);
CloseHandle(hFile);}
int _tmain(int argc, _TCHAR* argv[])
{
UINT nStd=0,nMapFile=0;
cout<<"使用标准C语言函数:"<<endl;
system("pause");
HANDLE hThread=(HANDLE)_beginthreadex(NULL,0,AssistantThread,&nStd,0,NULL);
UseStdio();
TerminateThread(hThread,0);
cout<<endl<<"使用内存映射文件:"<<endl;
system("pause");
hThread=(HANDLE)_beginthreadex(NULL,0,AssistantThread,&nMapFile,0,NULL);
UseMapFile();
TerminateThread(hThread,0);
cout<<endl<<"使用标准C语言函数耗时:"<<nStd<<" 使用内存映射文件耗时:"<<nMapFile<<endl;
system("pause");
return 0;
}
用一个1m多的文件做实验发现用内存映射文件会快个几秒
[[i] 本帖最后由 网络幽灵 于 2006-11-23 19:53 编辑 [/i]]
网络幽灵 2006-11-23 15:04
ps:如果想得到更精确的比较可以把Sleep()函数里面的数字改小一点.1000是1秒.