Pascal转C语言网站——深蓝评测系统

时间:2010年10月13日作者:坏男孩查看次数:1,768 views评论次数:6

对于我们这些NOIP的选手有一个问题——有些题目不会做的时候,就会想“百度一下”或者“Google”一下搜索题解。但是,有些题目的题解只有Pascal版本,没有C语言版本。这让人很头疼。

不过,在一次意外的访问,发现了一个网站:http://oj.oiers.cn  。这是深蓝评测系统,本来我是想刷刷水题,后来我发现这个网站竟然支持Pascal转换成C语言。不过转换的结果有一点小问题。。。翻译网址:http://oj.oiers.cn/utility/p2c/

比如这一段NOIP2008第一题的Pascal题解:

var
 a : array [0..13] of char;
 
 procedure init;
 var i : longint;
 begin
   for i := 1 to 13 do read(a[i]);
 end;
 
 procedure main;
 var i , j , t : longint;
 begin
   t := 0; j := 0;
   for i := 1 to 12 do
     if a[i] <> '-' then
     begin
       inc(j); t := t + (ord(a[i]) - 48) * j;
     end;
 
   t := t mod 11;
 
   if ((a[13] = 'X') and (t = 10)) or (ord(a[13]) - 48 = t) then
   begin
     writeln('Right');
     exit;
   end;
 
   for i := 1 to 12 do write(a[i]);
   if t = 10 then writeln('X') else writeln(t);
 end;
 
 begin
   init;
   main;
 end.

转换后的结果是:

#include <p2c/p2c.h>
 
Static Char a[14];
 
Static void init(void)
{
  long i;
 
  for (i = 1; i &lt;= 13; i++) {
    a[i] = getchar();
    if (a[i] == '\n')
      a[i] = ' ';
  }
}
 
Static void main_(void)
{
  long i;
  long j = 0, t = 0;
 
  for (i = 1; i &lt;= 12; i++) {
    if (a[i] != '-') {
      j++;
      t += (a[i] - 48) * j;
    }
  }
 
  t %= 11;
 
  if (a[13] == 'X' &amp;&amp; t == 10 || a[13] - 48 == t) {
    printf("Right\n");
    return;
  }
 
  for (i = 1; i &lt;= 12; i++)
    putchar(a[i]);
  if (t == 10)
    printf("X\n");
  else
    printf("%12ld\n", t);
}
 
main(int argc, Char *argv[])
{
  PASCAL_MAIN(argc, argv);
  init();
  main_();
  exit(EXIT_SUCCESS);
}

而真正的转换后的程序应该是:

#include <iostream>
using namespace std;
char a[14];
 
void init(void)
{
  long i;
 
  for (i = 1; i &lt;= 13; i++) {
    a[i] = getchar();
    if (a[i] == '\n')
      a[i] = ' ';
  }
}
 
void work(void)
{
  long i;
  long j = 0, t = 0;
 
  for (i = 1; i &lt;= 12; i++) {
    if (a[i] != '-') {
      j++;
      t += (a[i] - 48) * j;
    }
  }
 
  t %= 11;
 
  if (a[13] == 'X' &amp;&amp; t == 10 || a[13] - 48 == t) {
    printf("Right\n");
    return;
  }
  for (i = 1; i &lt;= 12; i++)
    putchar(a[i]);
  if (t == 10)
    printf("X\n");
  else
    printf("%d\n", t);
}
 
main()
{
  init();
  work();
  return 0;
}

仔细观察就可以看出端倪。每个程序也就改一点就行了。希望深蓝官方可以解决这些问题。
我想把这个代码弄到我的博客里来。。但不知道怎么移植。。唉~~希望有高人可以帮帮我!

声明: 本文采用 BY-NC-SA 协议进行授权 | 坏男孩的博客
转载请注明转自《Pascal转C语言网站——深蓝评测系统

标签:分类:C语言
6条评论
  1. 小杰留言于:2010年10月15日13:19 回复

    来晚了,地板吧~~ d9

  2. cautoz留言于:2010年10月15日11:27 回复

    我以为只有我一个人不懂这些,原来沙发和我一样。

    • 坏男孩留言于:2010年10月15日13:24 回复

      这些给编程爱好者用的。。不懂得人很多,不必担心。不过会一门语言总是件好事。

  3. 远走高飞留言于:2010年10月14日21:56 回复

    来占个沙发 d3 d3

    • 坏男孩留言于:2010年10月15日13:23 回复

      是不是看不懂,就占沙发。。

发表评论

*

*

d9 d8 d7 d6 d56 d55 d54 d53 d52 d51 d50 d5 d49 d48 d47 d46 d45 d44 d43 d42 d41 d40 d4 d39 d38 d37 d36 d35 d34 d33 d32 d31 d30 d3 d29 d28 d27 d26 d25 d24 d23 d22 d21 d20 d2 d19 d18 d17 d16 d15 d14 d13 d12 d11 d10 d1