东华大学码蹄集oj赛第一周(三合一,竖直打印机,硬币塔,巨大的错误,三角形个数)

三合一
在这里插入图片描述
模拟即可

#include<bits/stdc++.h> 

using namespace std;

vector<int> v;
int main( )
{
    int n;
    cin >> n;
    for (int i = 1; i <= n;i++)
        {
            int x;
            cin>>x;
            v.push_back(x);
        }
        int num = 0;
        while (1)
        {
            int len=v.size();
            if (len <= 2)
                break;
            num++;

            for (int i = 0; i + 2 < len;i++)
            {
                if ((v[i+0] + v[i+1] + v[i+2]) <= num * 3)
                {
                    int sum=v[i+0] + v[i+1] + v[i+2];
                    v[i]=sum;
                    v.erase(v.begin()+i+1);
                    v.erase(v.begin()+i+1);
                    len-=2;
                }
            }
        
    }
    cout << num << endl;

    system("pause");
    return 0;
}

竖直打印机
在这里插入图片描述

#include<bits/stdc++.h> 

using namespace std;

string a[1001];
int main( )
{
    string str;
    char ch;
    int mx = 0;
    int k = 0;
    while(cin>>str)
    {
     a[k++] = str;
     mx = max(mx, (int)str.length());
      if(ch=cin.get()=='\n')
         break;
    }
    //cout << mx << endl;
    //cout << k << endl;
    for (int i = 1; i <= mx;i++)
    {
     for (int j = 0; j < k;j++)
     {
        if(a[j].length()<i)
            cout << " ";
        else
            cout << a[j][i - 1];
     }
     cout << endl;
    }

    //system("pause");
    return 0;
}

硬币塔
看的别人的代码
在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;
typedef pair<ll, ll> pii;
#define SIZE 40

map<pii, ll> ma;
ll height[SIZE + 1] = {1};

ll getAB(ll a, ll b) {  // a层塔的下b层有多少个金币
    ll originalB = b;
    if (ma.count({a, b}))
        return ma[{a, b}];
    if (a == 0) {
        return ma[{a, b}] = 1;
    }
    ll ans = 0;
    b--;  // 最下面的银币
    if (b > 0) {
        ll removeHeight = min(height[a - 1], b);
        b -= removeHeight;
        ans += getAB(a - 1, removeHeight);
    }
    if (b > 0) {
        ll removeHeight = min(a, b);  // 中间有a个金币
        b -= removeHeight;
        ans += removeHeight;
    }
    if (b > 0) {
        ll removeHeight = min(height[a - 1], b);
        b -= removeHeight;
        ans += getAB(a - 1, removeHeight);
    }
    b--;
    return ma[{a, originalB}] = ans;
}


int main(int argc, char** argv) {
    for (ll i = 1; i <= SIZE; i++) {
        height[i] = 1 + height[i - 1] + i + height[i - 1] + 1;
    }
    ll a, b;
    cin >> a >> b;
    if (!b) {
        puts("0");
        return 0;
    }
    ll ans = getAB(a, b);
    printf("%lld\n", ans);
    return 0;
}

巨大的错误
简单的组合数学

在这里插入图片描述

#include<bits/stdc++.h> 

using namespace std;
long long dp[21];
long long  c(int n,int m)
{
    long long ans1=1,ans2=1;
    for(int i=n,j=m;j>=1;j--,i--)
    {
        ans1=ans1*i;
        ans2=ans2*j;
    }

    return ans1/ans2;
}
long long a(int n)
{
    long long ans=1;
    for(int i=1;i<=n;i++)
    ans=ans*i;
    return ans;
}
int main( )
{
    int n;
    cin>>n;
    if(n<=1)
    {
        cout<<0<<endl;

        return 0;
    }
    dp[0]=1;
    dp[2] = 1;
    dp[3] = 2;
    //cout << num << endl;
    //cout << c(5, 2) << endl;
    for (int i = 4; i <= n;i++)
    {
       dp[i] = a(i);
    for (int j = 1; j <= i; j++)
       {
           if(j==i-1)continue;
          dp[i] -= c(i, j) * dp[i - j];
       }
       
    }
    // dp[4]-4*

    cout<<dp[n]<<endl;

    //system("pause");
    return 0;
}

三角形个数

推一下递推公式
//(n+1)(2nn+3n-1)/8 n奇数
//n*(n+2)(2n+1)/8 n偶数
在这里插入图片描述

#include<bits/stdc++.h> 
//(n+1)*(2*n*n+3*n-1)/8   n奇数
//n*(n+2)*(2*n+1)/8   n偶数
using namespace std;

int main( )
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        if(n&1)cout<<(n+1)*(2*n*n+3*n-1)/8<<endl;
        else cout<<n*(n+2)*(2*n+1)/8<<endl;
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 东华大学计算机学院oj最后70道题是计算机学院学生们在课程中所遇到的挑战和机遇。这些题目涵盖了计算机科学和技术的不同领域和方向,需要学生们具备扎实的知识基础和解决问题的能力。 这70道题可以分为多个类别,包括数据结构与算法、数据库系统、网络与通信、人工智能与机器学习等。其中数据结构与算法类题目需要学生们掌握常见的数据结构和算法,如链表、树、排序、查找等,以及各种经典算法的应用,如动态规划、贪心算法等。数据库系统类题目要求学生们熟悉数据库设计和管理的基本原理,包括表的建立、查询语句的优化等。网络与通信类题目涉及到计算机网络的基本原理和协议,要求学生们理解网络层次结构、IP地址分配、路由协议等。人工智能与机器学习类题目则需要学生们具备一定的数学基础和统计学知识,能够理解和实现机器学习算法,如线性回归、逻辑回归、决策树等。 解答这70道题目需要学生们进行思路分析、问题拆解、编程实现等一系列步骤。在解答过程中,学生们将面临各种技术挑战和困难,如算法优化、数据处理、并发编程等。同时,他们也会收获到解决问题的成就感和技术提升的经验。 东华大学计算机学院oj最后70道题是学生们在计算机学科学习中的一个重要里程碑,它们代表了学生们对计算机科学技术的全面掌握和应用能力的提升。通过解答这些题目,学生们将进一步巩固和扩展自己的计算机专业知识,培养独立思考和解决问题的能力,为未来的职业发展打下坚实的基础。 ### 回答2: 东华大学计算机学院oj最后70道题包括了计算机学院的各个专业方向的知识点和实际应用题。这些题目涉及到计算机编程、算法、数据结构、操作系统、数据库、网络等方面的内容。 在计算机编程方面,可能会涉及到一些常见的编程语言,如C、C++、Java等,要求学生使用所掌握的编程语言进行编程练习和问题解决。这能帮助提高学生的编程实践能力和解决实际问题的能力。 在算法和数据结构方面,可能会涉及到一些经典的算法问题,如排序算法、查找算法、图算法等,要求学生掌握这些算法的原理和实现,并能够灵活运用于不同场景。 在操作系统方面,可能会涉及到一些操作系统的基本原理和概念,如进程管理、内存管理、文件系统等,要求学生了解操作系统的工作原理和实际应用。 在数据库方面,可能会涉及到一些数据库的基本操作和查询语言,如SQL语言,要求学生掌握数据库的基本概念和操作,并能够进行简单的数据存储和查询。 在网络方面,可能会涉及到一些网络协议和网络应用,如TCP/IP协议、HTTP协议、Web开发等,要求学生了解网络的基本原理和实现,并能够进行简单的网络编程和应用开发。 总之,东华大学计算机学院oj最后70道题涵盖了计算机学院各个专业方向的知识点和应用题,通过解答这些题目,学生可以巩固和拓展自己的专业知识,并提高解决实际问题的能力。 ### 回答3: 东华大学计算机学院oj最后70道题,是计算机学院为培养学生计算机编程能力和算法解决问题的能力而设计的。这些题目的难度相对较高,需要学生有扎实的编程基础和算法知识。题目涵盖了数据结构、算法设计与分析、计算机网络等多个方向。学生需要通过编程语言编写代码,并根据题目要求设计算法,并在给定的时间内尽可能完成算法的实现。通过解答这些题目,学生不仅可以提升自己的编程能力,还可以培养自己的逻辑思维、问题分析和解决问题的能力。 在解答这些题目的过程中,学生需要独立思考,分析问题的本质和要求,并设计出合适的算法和编程代码。通过多次实践,学生可以提高自己的编程速度和算法设计能力,不断完善自己的编程技巧。同时,解答这些题目也培养了学生的团队合作能力,因为在解决复杂问题时,往往需要多人共同协作,共同完成任务。 总之,东华大学计算机学院oj最后70道题对于计算机学生的学习和成长是非常有益的。它不仅可以提高学生的编程能力和算法设计能力,还可以锻炼学生的团队合作和解决问题的能力。通过不断解答这些题目,学生可以不断地完善自己的技能,为今后的学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值