微软编程一小时

由于通知的太尴尬,那时候人已在上海,所以没时间做,昨天晚上看了一下题目,自己写了一下,但是不能提交了,就放在这里让大家给我检查检查。

第一题,不知道是不是想的太复杂了,我把每个表达式都表示成分数的形式,然后减去9,然后进行比较。为了分数的加减以及比较,所以写了一个分数结构体,提供+,-,<的运算。

  1 #include<iostream>
  2 using namespace std;
  3 struct fenshu{
  4     int fenzi;
  5     int fenmu;
  6     fenshu(){
  7         fenzi=1;
  8         fenmu=1;
  9     }
 10     fenshu(int a){
 11         fenzi=a;
 12         fenmu=1;
 13     }
 14     fenshu(int a,int b){
 15         fenzi=a;
 16         fenmu=b;
 17     }
 18     fenshu operator - (const fenshu& b) const{
 19         fenshu c;
 20         c.fenzi=fenzi*b.fenmu-b.fenzi*fenmu;
 21         c.fenmu=fenmu*b.fenmu;
 22         c.clear();
 23         return c;
 24     }
 25     bool operator < (const fenshu& b) {
 26         if(fenzi*b.fenmu<fenmu*b.fenzi)
 27             return true;
 28         else
 29             return false;
 30     }
 31     void clear(){
 32         if(fenzi<0)
 33             fenzi=-fenzi;
 34         for(int i=2;;){
 35             if(i<fenzi&&i<fenmu){
 36                 if(fenzi%i==0&&fenmu%i==0){
 37                     fenzi/=i;
 38                     fenmu/=i;
 39                 }
 40                 else
 41                     i++;
 42             }
 43             else
 44                 break;
 45         }
 46     }
 47 };
 48 int main(){
 49 
 50     int n;
 51     cin>>n;
 52     fenshu nine(9);
 53     fenshu minfenshu(1000);
 54     int num;
 55     for(int i=0;i<n;i++){
 56         int a,b;
 57         char c;
 58         fenshu xxx;
 59         fenshu temp;
 60         cin>>a>>c>>b;
 61         switch(c){
 62         case '+':
 63             temp.fenzi=a+b;
 64             xxx=temp-nine;
 65             if(xxx<minfenshu){
 66                 minfenshu=xxx;
 67                 num=i+1;
 68             }
 69             break;
 70         case '-':
 71             temp.fenzi=a-b;
 72             xxx=temp-nine;
 73             if(xxx<minfenshu){
 74                 minfenshu=xxx;
 75                 num=i+1;
 76             }
 77             break;
 78         case '*':
 79             temp.fenzi=a*b;
 80             xxx=temp-nine;
 81             if(xxx<minfenshu){
 82                 minfenshu=xxx;
 83                 num=i+1;
 84             }
 85             break;
 86         case '/':
 87             temp.fenzi=a;
 88             temp.fenmu=b;
 89             xxx=temp-nine;
 90             if(xxx<minfenshu){
 91                 minfenshu=xxx;
 92                 num=i+1;
 93             }
 94             break;
 95         default:
 96             break;
 97         }
 98         
 99     }
100     cout<<num<<endl;
101 }

第二题是找最长的重复子串

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int n,maxlen=1;
 5     cin>>n;
 6     int a[301];
 7     for(int i=0;i<n;i++)
 8         cin>>a[i];
 9     for(int i=0;i<n;i++){
10         for(int j=i+1;j<n;j++){
11             if(a[i]==a[j]){
12                 for(int k=1;k<n;k++){
13                     if(i+k==j||j+k==n){
14                         if(k>maxlen){
15                             maxlen=k;
16                         }
17                         break;
18                     }
19                     
20                     if(a[i+k]==a[j+k])
21                         continue;
22                     else
23                         if(k+1>maxlen){
24                             maxlen=k+1;
25                             break;
26                         }
27                 }
28             }
29         }
30     }
31     cout<<maxlen<<endl;
32 }

 

posted on 2014-04-09 16:44  云在心  阅读(425)  评论(2)    收藏  举报

导航