微软编程一小时——Arithmetic Expression

  第一篇博客呀,有点小激动!不妨先多唠叨几句,陆陆续续在几个OJ上也刷了1000多题了,里面不少题目都有自己独特的想法,未必最好,却很有特色。六个月前就注册博客园了,一直没敢动手写博客,最大的原因是在看博客的过程中发现了太多的大神,不敢写啊,怕贻笑大方啊。这两天思想上却又有了一些转变,在看赵岩的《C语言点滴》的时候看到程序员写博客的事,忍不住去网上看了些大家对博客的态度,似乎更像日记多一些,那只要有自己独特的思想和感悟,我何尝不能写博客呢?好,说干就干,就从今天开始!

  一开始也没啥主题,就把最近比赛做的一些题目先放出来吧。“微软编程一小时”,这个大概在四月初的时候,一个小时做两道题吧。我没报名,实验室的师姐让帮忙做题来着,就把两题都做了一下。先说第一题吧,把题目描述粘过来先。

 

题目1 : Arithmetic Expression
  时间限制:2000ms
  单点时限:200ms
  内存限制:256MB


描述
  Given N arithmetic expressions, can you tell whose result is closest to 9?

 

输入
  Line 1: N (1 <= N <= 50000).
  Line 2..N+1: Each line contains an expression in the format of "a op b" where a, b are integers (-10000 <= a, b <= 10000) and op is one of addition (+), subtraction (-), multiplication (*) and division (/). There is no "divided by zero" expression.


输出
  The index of expression whose result is closest to 9. If there are more than one such expressions, output the smallest index.


样例输入
  4
  901 / 100
  3 * 3
  2 + 6
  8 - -1

 

样例输出
  2

 

  题目比较简单,判断哪个表达式的结果最接近9.0,输入也很“人性化”,“a op b”。op无非是加减乘除四个运算符,a和b可以直接以double类型读入,运算时候也不用强制转换了。程序运行过程中用min记录跟9.0最接近的那行结果与9.0之差的绝对值,res记录行号,最后输出res即可。下面是代码。

 

 1 //  得分: 100 / 100
 2 //  题目: Arithmetic Expression
 3 //  结果: AC
 4 //  语言: G++
 5 //  时间: 80ms
 6 //  内存: 38MB
 7 
 8 #include <cstdio>
 9 #include <cmath>
10 
11 const double dst = 9.0;
12 const double inf = 99999999999;
13 
14 int main(void)
15 {
16     int i, n, res;
17     double a, b, c, min;
18     char op;
19     while (EOF != scanf("%d", &n)) {
20         min = inf;
21         for (i = 1, res = 0; i <= n; i++) {
22             scanf("%lf %c %lf", &a, &op, &b);
23             switch (op) {
24                 case '+' : c = a + b; break;
25                 case '-' : c = a - b; break;
26                 case '*' : c = a * b; break;
27                 case '/' : c = a / b; break;
28                 default : break;
29             }
30             if ((c = fabs(c - dst)) < min) {
31                 min = c;
32                 res = i;
33             }
34         }
35         printf("%d\n", res);
36     }
37     return 0;
38 }
View Code

 

posted on 2014-04-24 21:25  guikeyi  阅读(284)  评论(1)    收藏  举报