CONTEST1001 題解

来源:https://www.cnblogs.com/baccano-acmer/archive/2018/09/27/9716047.html
-Advertisement-
Play Games

PROBLEM A 分析 分析 這個題屬於非常基礎的輸出問題,一般來說見到這種題可以直接複製粘貼即可。 講解 講解 沒有什麼詳細說明的直接複製粘貼即可。這樣不容易出錯。 代碼 代碼 點評 點評 很基礎的一道題,主要是熟悉OJ的使用和OJ的出題格式。 PROBLE B PROBLE B 分析 分析 這 ...


PROBLEM A

分析

這個題屬於非常基礎的輸出問題,一般來說見到這種題可以直接複製粘貼即可。

講解

 沒有什麼詳細說明的直接複製粘貼即可。這樣不容易出錯。

代碼

 

#include <stdio.h>
int main()
{
    printf("**************************\n");
    printf("         Very    Good!\n");
    printf("**************************\n");
    return 0;    
}

 

點評

         很基礎的一道題,主要是熟悉OJ的使用和OJ的出題格式。

PROBLE B

 

 

 

分析

         這個題相比第一題直接輸出來說還多了輸入。需要註意的是樣例不代表程式只有10 20 30.而是其中之一是10 20 30.所有我們要調用scanf來進行輸入。

       怎麼求三個數的最大值,其實有很多方法。在這裡我就先介紹一種比較直觀的數學方法了(當然應該不是最簡單的,只是感覺比較好懂罷了)。

       假設a,b,c 如果求出a,b的最大值,再求出a,c的最大值,那麼不就是求出了a,b,c的最大值?

講解

         *下麵的方法使用了?運算符請大家去翻一下課本如果有什麼不清楚的話,不過也是基礎的語法。這樣可以減少代碼量,當然再後續的學習中,會知道更多的函數來減少這種方法的代碼量,但是這裡不再詳細介紹。

代碼

#include <stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    int k1=(a>b)?a:b;
    int k2=(a>c)?a:c;
    int k3=(k1>k2)?k1:k2;
    printf("%d",k3);    
}

點評

         對於初學者而言可能不是一道輕鬆的題,但是掌握了這道題的話,說明你已經基本掌握了if的使用方法。

PROBLE C

 

 

 

分析

       這個題說實話開始有點技術含量了,不是直接就能上手去做的。這裡用到了迴圈語句,我在此用的是for,因為for對於計步迴圈來說還是比較好用的。這個題的難點在於怎麼去求解2+22+222+…+22…222(n個2)的值的問題。

講解

         首先看到這種不斷迴圈相加的情況,首先想到要用迴圈語句。對於上式的求解,其實經過觀察我們可以發現一種方法。他們都是2*1,2*11,2*111的,那麼怎麼去實現這種功能呢,我們需要定義兩個變數r,sum(當然其他的字母也可以,這裡只是習慣上)。每次迴圈把r累積乘10再加1即可即r=r*10+1;用sum來進行計數。即sum+=2*r;到此程式的主要部分講解完畢。

代碼

       註意下麵sum初始值=2!!!i1開始迴圈!!

#include <stdio.h>
int main()
{
    int n,r,sum;
    scanf("%d",&n);
    r=1;sum=2;
    for(int i=1;i<n;i++)
    {
        r=r*10+1;
        sum+=2*r;    
    }    
    printf("%d",sum);
}

點評

         這可能是大家第一次做這種與數學相關的題目。其實我感覺這個題是告訴大家,編程跟數學是密切相關的。

PROBLE D

 

 

分析

         這個題雖然只有三個數,但是也透露出了一絲絲排序演算法的影子。但是在這裡我就先不准備講解排序的一些演算法(如冒泡排序)了,直接講解硬來的解法。

講解

         首先我們得知道交換變數的方法,其中一個就是三變數交換法。我們先定義一個t  t=a;a=b;b=t這樣即可交換a和b,為什麼要定義一個t來交換而不是直接交換呢,這些還需要你自己思考。那麼有了這個交換變數的方法,我們就可以實施我們的方法了。我們進行直接硬來的三個if進行交換。例如if(a>b) { int t=a;a=b;b=t} 這樣交換後就是a<=b了,同理還有(a>c) (b>c)兩個,

 

 

出自紫書《演算法競賽入門經典》

詳細請看代碼

代碼

 

#include <stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    if(a>b) {int t=a;a=b;b=t;}
    if(a>c) {int t=a;a=c;c=t;}
    if(b>c)    {int t=b;b=c;c=t;}
    printf("%d %d %d",a,b,c);
    return 0;
}

點評

         這個題僅僅是三個數比大小如果是4個5個乃至更多的數呢?建議大家自己去學習一下排序的演算法,推薦冒泡排序

PROBLE E

 

 

分析

         這還是一道數學題,題目本身不難解法很多。但是這裡出現了迴圈輸入輸出的問題需要註意。

講解

       迴圈輸入輸出的基本做法是用一個while函數來實現。這裡不得不提一下scanf函數的返回值為輸入正確的元素的個數,到EOF結束指的是end of file,文件末尾。因為oj的判捲是文件輸入文件輸出進行數據的匹配來進行判捲的。oj會把你的程式的輸出文本與答案比對如果全部一致那麼恭喜你就是accepted,如果是其他會提示別的情況,再次不詳細說明,看群里文件的入門指南即可。因為要輸入三個值所以需要寫成 while(scanf(“%d %d %d”,&a,&b,&c)==3)

其他的就是判斷三角形的方法,判斷直角三角形的方法,方法很多不再詳細介紹。

詳細請看代碼

代碼

 

#include <stdio.h>
int main()
{
    int a,b,c;
    while(scanf("%d %d %d",&a,&b,&c)==3)
    {
        if(a+b>c&&a+c>b&&b+c>a)
        {
            if(a*a+b*b==c*c)
            printf("yes\n");
            else
            printf("no\n");
        }
        else
        printf("not a triangle\n");
    }
    return 0;
}

如果判斷三角形條件有不熟悉的同學的話,可以看看代碼里的if語句。

點評

       這道題的要點我覺得在於迴圈輸入和輸出。題目本身而言並不難,只需要多多註意細節即可。

 

       


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring能做什麼 1. 能根據配置文件創建及組裝對象之間的依賴關係; 2. 面向切麵編程,能幫助我們無耦合的實現日誌記錄,性能統計,安全控制等; 3. 提供第三方數據訪問框架(如Hibernate),而且自己也提供了一套JDBC訪問模板方便訪問資料庫; 4. 非常簡單的管理資料庫事務; 5. 集 ...
  • 函數式介面在Java中是指:有且僅有一個抽象方法的介面 ; 函數式介面,即適用於函數式編程場景的介面。而Java中的函數式編程體現就是Lambda,所以函數式介面就是可以適用於Lambda使用的介面。只有確保介面中有且僅有一個抽象方法,Java中的Lambda才能順利地進行推導。 基本格式語法: 修 ...
  • 上一篇文章介紹了Java工程的帝國區劃,末尾給出了一段Java代碼例子,這個代碼雖然勉強能看懂,但是有些細節令人不甚了了。比如說“// 參觀朱雀台”為何能夠直接跟在當前行後面?“System.out.println”又為何被點號繞了三道灣?顯然這裡面必定有一些規則需要遵守,好比到了一個國家就要入鄉隨 ...
  • 1. 原地交換兩個數字 Python 提供了一個直觀的在一行代碼中賦值與交換(變數值)的方法,請參見下麵的示例: x,y= 10,20 print(x,y) x,y= y,x print(x,y) #1 (10, 20) #2 (20, 10) 賦值的右側形成了一個新的元組,左側立即解析(unpac ...
  • Hibernate中Criteria的完整用法 criteria 英[kraɪˈtɪərɪə] 美[kraɪˈtɪrɪə] 標準 1,Criteria Hibernate 設計了 CriteriaSpecification 作為 Criteria 的父介面,下麵提供了 Criteria和Detach ...
  • 在使用ant design的upload上傳文件時,前端很好實現,那麼我們如何實現node服務端呢? 服務端文件上傳實現 前端代碼 ...
  • 迭代相關 iter(): 將一個序列轉換成迭代器 next(): 自動調用對象的 方法來迭代對象 map(): 將一個序列值作為參數,依次調用一個函數,在python2中直接返回列表,但在python3中返回迭代器 filter(): 過濾列表中的元素,並且返回一個由所有符合要求的元素所構成的列表, ...
  • 1.先保證centos中安裝了jre的環境。 2.上傳tomcat的壓縮包到root根目錄。 3.切換到根目錄 輸入命令cd ~ , 然後 ll , 查看上傳情況: 4.選中複製壓縮文件,輸入解壓命令,tar -zxvf apache-tomcat-7.0.57.tar.gz -C /usr/loc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...