zoukankan      html  css  js  c++  java
  • 周练1

    7-1 N个数求和

    写了蛮久 我做水题的能力太差了  明天得把周练题目全部a了 

    还是有一个超时

    #include <bits/stdc++.h>
    
    using namespace std;
    
    
    long gvs(long a,long b);
    int main()
    {
    
        int n;cin>>n;
    
        long a[105][2];
        for(int i=1;i<=n;i++)
         {
             scanf("%ld/%ld",&a[i][0],&a[i][1]);//printf("1:%d/%d
    ",a[i][0],a[i][1]);
         }
    
         for(int i=1;i<=n-1;i++)
         {
             int g=gvs(a[i][1],a[i+1][1]);
            //  printf("g=%d
    ",g);
    
             a[i+1][0]=a[i+1][0]*(g/a[i+1][1]); //printf("%d
    ",a[i+1][0]);
             a[i][0]=a[i][0]*(g/a[i][1]); //printf("%d
    ",a[i][0]);
             a[i+1][0]+=a[i][0];//printf("%d
    ",a[i+1][0]);
             a[i+1][1]=g;//printf("%d
    ",a[i+1][1]);
    
         }
    
    
    
    //printf("%d/%d
    
    ",a[n][0],a[n][1]);
    int f=0;
    if(a[n][0]<0){f=1;printf("-");a[n][0]=-a[n][0];}
    if(a[n][0]==0)printf("0");
     long num=a[n][0]/a[n][1];
     a[n][0]%=a[n][1];
      if(num!=0&&a[n][0]!=0) printf("%d ",num);
      else if(num!=0)printf("%d",num);
     if(a[n][0]!=0)
     {
         for(int i=a[n][0];i>0;i--)
         {
             if(a[n][0]%i==0&&a[n][1]%i==0){if(f)printf("-"); printf("%ld/%ld",a[n][0]/i,a[n][1]/i); break;}
         }
    
    
    
     }
    
    
    
    
    
    
    
    
        return 0;
    
    }
    
    long gvs(long a,long b)
    {
        if(a>b){int t=a;a=b;b=t;}
    
        for(long i=a;;i+=a)
        {
            if(i%a==0&&i%b==0)return i;
    
        }
    
    
    
    }
    View Code

    看了别人的  最大公约数辗转相除  快了很多

    并且边读边处理更加好

    #include <stdio.h>
     
    long long gcd(long long a,long long b)//求最大公约数。
    {
        if(a == 0)
            return 0;
        else
            return (b == 0) ? a : gcd(b, a % b);
    }
     
    int main()
    {
        int N;
        long long lcp;//用以记录最小公倍数
        long long a,b,c,d;
        int i = 1;
        scanf("%d",&N);
        scanf("%lld/%lld",&a,&b);
        int t0 = gcd(a,b);
        if(a)
        {
            a /= t0;
            b /= t0;
        }
     
        while(i < N)
        {
            scanf("%lld/%lld",&c,&d);
            lcp = b / gcd(b,d) * d;//通过最大公约数换算出两个分母的最小公倍数
            a = a * lcp / b + c * lcp / d;//通分后分子和
            b = lcp;
            int t0 = gcd(a,b);
            if(t0 != 0)//从扩大最小公倍数之后的形式变换回来
            {
                a = a / t0;
                b = b / t0;
            }
            i++;
        }
        if(a && a/b == 0)/// 整数部分为0 且 a不为 0
            printf("%lld/%lld
    ",a%b,b);
        else if(a%b == 0)/// 小数部分为0
            printf("%lld
    ",a/b);
        else
            printf("%lld %lld/%lld
    ",a/b,a%b,b);
        return 0;
    }
    View Code

    7-3 A-B  

    本题要求你计算AB。不过麻烦的是,A和B都是字符串 

    自己写1: 有一个点超时

    #include <bits/stdc++.h>
    
    using namespace std;
    
    
    
    int main()
    {
    
    string s,a;
    getline(cin,s);
    getline(cin,a);
    for(int i=0;i<a.size();i++)
    {
        for(int k=0;k<s.size();k++)
        {
            if(a[i]==s[k])
            {
    
                for(int j=k;j<s.size();j++)
                {
    
                 s[j]=s[j+1];}
                 k--;
    
                }
    
        }
    
    
    }
    cout<<s;
    
    
    
    return 0;
    }
    View Code

    想到向量 过了    最好不要map<char,int> char就是int

    #include <bits/stdc++.h>
    
    using namespace std;
    
    
    
    int main()
    {
    
    string s,a;
    getline(cin,s);
    getline(cin,a);
    vector<char>ans;
    map<int,int>m;
    for(int i=0;i<a.size();i++)
    {
        m[a[i]]=1;
    
    }
    
    for(int i=0;i<s.size();i++)
    {
        if(m[s[i]]!=1)ans.push_back(s[i]);
    
    }
    
    //printf("%d",ans.size());
    for(int i=0;i<ans.size();i++)
        cout<<ans[i];
    
    
    
    
    
    return 0;
    }
    View Code

    7-9 集合相似度

    用了三个set 所以有一个点超时了  

    #include <bits/stdc++.h>
    
    using namespace std;
    
    
    
    
    set<long>a[60];
    int main()
    {
    set<long>s;
    int n;cin>>n;long x;
    for(int i=1;i<=n;i++)
    {  int c;
       cin>>c;
       for(int k=1;k<=c;k++)
            {cin>>x;a[i].insert(x);}
    
    
    }
    int k;cin>>k;int q,w;
    int c[2000][2];
    for(int i=1;i<=k;i++)
    {
        cin>>c[i][0]>>c[i][1];
    }
    
    
    for(int i=1;i<=k;i++)
    {  s.clear();
        q=c[i][0];w=c[i][1];
        int n1=a[q].size()+a[w].size();
        for (set<long>::iterator it = a[q].begin(); it != a[q].end(); ++it)
         {
            s.insert(*it);
         }
         for (set<long>::iterator it = a[w].begin(); it != a[w].end(); ++it)
         {
             s.insert(*it);
         }
    
            int n2=s.size();
        printf("%.2lf%%
    ",100.0*(n1-n2)/n2);
    
    }
    
    
    
    
    
    return 0;
    }
    View Code

     优化了代码  很多时候不一定要对两个进行操作  对一个就行了 可以变读入边输出 省下一个C数组

    #include <bits/stdc++.h>
    
    using namespace std;
    
    
    
    
    set<long>a[60];
    int main()
    {
    set<long>s;
    int n;cin>>n;long x;
    for(int i=1;i<=n;i++)
    {  int c;
       scanf("%d",&c);
       for(int k=1;k<=c;k++)
            {scanf("%ld",&x);a[i].insert(x);}
    
    
    }
    int k;cin>>k;int q,w;
    
    
    
    for(int i=1;i<=k;i++)
    {  s.clear();
        scanf("%d%d",&q,&w);
    
        int n1=a[q].size()+a[w].size();int c=0;
        for (set<long>::iterator it = a[q].begin(); it != a[q].end(); ++it)
         {
            if(a[w].count(*it))c++;
         }
    
    
        printf("%.2lf%%
    ",100.0*(c)/(n1-c));
    
    }
    
    
    
    
    
    return 0;
    }
    View Code
     
  • 相关阅读:
    ionic localstorage
    angular 中文鏈接
    把jqmobi 變成jQuery 的插件 從此使用jQuery
    jqmobi 的一些設置
    ionic ngcordova map 地圖
    ionic pull to refresh 下拉更新頁面
    json 對象的序列化
    鍵盤彈出,頁面佈局被推上去了.....
    Cordova V3.0.0中config.xml配置文件的iOS Configuration
    android ios 只能輸入數字 不能輸入小數點的 函數 cordova
  • 原文地址:https://www.cnblogs.com/bxd123/p/10177142.html
Copyright © 2011-2022 走看看