菜鳥記錄PAT甲級1002--Polynomials

来源:https://www.cnblogs.com/whf10000010/archive/2022/10/20/16800340.html
-Advertisement-
Play Games

開始前有必要說一下,這才第二題就碰到了爛尾題,以自己開始的思路交了n次,錯了n詞,最後才19分,後來看了一下大佬的c++代碼(盡然沒有c的代碼),還好c和c++的差別不是特別大,仔細琢磨一遍後突然發現很多地方可以改進,整理思路在此嘗試終於AC,這才第二題啊。。。。 This time, you ar ...


  開始前有必要說一下,這才第二題就碰到了爛尾題,以自己開始的思路交了n次,錯了n詞,最後才19分,後來看了一下大佬的c++代碼(盡然沒有c的代碼),還好c和c++的差別不是特別大,仔細琢磨一遍後突然發現很多地方可以改進,整理思路在此嘗試終於AC,這才第二題啊。。。。

This time, you are supposed to find A+B where A and B are two polynomials.

Input Specification:

Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:

N1 aN1 N2 aN2 ... NK aNK

where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1,2,,K) are the exponents and coefficients, respectively. It is given that 1K10,0NK<<N2<N11000.

Output Specification:

For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.

Sample Input:

2 1 2.4 0 3.2
2 2 1.5 1 0.5
 

Sample Output:

3 2 1.5 1 2.9 0 3.2

 題目分析:

  兩行數據A和B,每一行的第一個數字 K 是它的非零項(即a不等於0),接下來的2*K個數字由K個數據N和K個數據a組成,N是指數(exponents),即下標,a是繫數(coefficients),輸入的例子中第一行,2是2個非零數,然後a1=2.4,a0=3.2,第二行,2個非零數,a2=1.5,a1=0.5。現在將A,B兩行下標相等的數字相加,輸出所有非零數個數、數值和其下標,即3個非零數,a2=1.5,a1=2.9(2.4+0.5),a0=3.2。輸出結尾不得有多餘空格。

個人想法:

  錯誤想法(正確的在下麵):開始筆者是想劃分兩個數組,分別存放下標N[]、存放數值a[],賦值時,即用a[N[i]]來將一個值存放在迴圈中N數組存儲的下標位置,例如存入4.3,N[1]=6,a[N[1]]=a[6]=4.3,賦值A行全部結束後,用tmp賦值B行時,直接加上即·a[xx]+=tmp,最後遍歷找非零項,記錄個數,輸出非零項就好了,下麵是代碼:

 1 #include <stdio.h>
 2 #define A 10001;
 3 int K;//非0值
 4 int N[1001];//存放下標N
 5 double a[10001], b[10001];
 6 
 7 int main()
 8 {
 9     double tmp;
10     scanf("%d", &K);
11     for (int i = 0; i < K; i++)
12     {
13         scanf("%d%lf", &N[i], &tmp);
14         a[N[i]] = tmp;
15     }//第一行輸入的數
16     scanf("%d", &K);
17     for (int i = 0; i < K; i++)
18     {
19         scanf("%d%lf", &N[i], &tmp);
20         a[N[i]] += tmp;
21     }
22     int p = 0;
23     if (a[0])p = 1;
24     for (int i = 0; i < 10001; i++)
25     {
26         if (a[i] && N[i] != 0)
27             ++p;
28     }
29     printf("%d", p);
30     for (int i = 10000; i >= 0; i--)
31     {
32         if (a[i] != 0)
33             printf(" %d %.1lf", i, a[i]);
34     }
35 printf("\n");
36     return 0;
37 }

  由於自己的這個想法只能拿到19分,這裡就不貼出自己前面錯誤改進後的代碼了。也請給位看官有興趣的幫忙指正我的代碼漏洞。

 

 <----------接下來是滿分代碼------------>

  其實代碼總體思路是不變的,但是大佬的代碼更加簡潔、清楚,原先的下標數組N直接變成常量賦值,即a[N],整體過程也不再那麼抽象,甚至用多個數組標記A、B輸入數組和最後的輸出數組。通過代碼更容易看出:

 1 #include <stdio.h>
 2 #define A 10001;
 3 
 4 int main()
 5 {
 6     double t;//數值
 7     int count=0;
 8     int K;//非0值
 9     int N;//下標值
10     double a[1001], b[1001],c[1001];//兩個輸入值和最後輸出數組
11     memset(a, 0.0, sizeof(a));
12     memset(b, 0.0, sizeof(b));
13     memset(c, 0.0, sizeof(c));//初始化,個人認為設為全局變數就行,不用初始化了
14     scanf("%d", &K);
15     for (; K > 0; K--) {
16         scanf("%d%lf",&N,&t);
17         a[N] = t;
18     }
19     scanf("%d", &K);
20     for (; K > 0; K--) {
21         scanf("%d%lf", &N, &t);
22         b[N] = t;
23     }//A、B的數值輸入
24     for (int i=0; i<1001; i++) {
25         if (a[i] != 0 || b[i] != 0) {//遍歷所有範圍,如果輸入數組存在非0項,則放入輸出數組
26             c[i] = a[i] + b[i];
27             if(c[i]!=0)
28             count++;
29         }
30     }
31     printf("%d", count);//輸出非0項數的數目
32     for (int i =1000 ; i >=0; i--) {
33         if (c[i] != 0)
34             printf(" %d %.1lf", i, c[i]);
35     }
36 
37     return 0;
38 }

 

 滿分通過。

總結:

  由於一些測試點看不到,所有原先最後那沒通過還是不清楚,看了幾次也看不出來哪裡有遺漏的地方,暫時也只能這樣了,功夫不到家,差的太遠。還有照例英語。

 

 

 

 

 

 

 

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

-Advertisement-
Play Games
更多相關文章
  • 前言 嗨嘍~大家好呀,這裡是魔王吶 ! 國企文員和游戲陪玩兩個職業間,你會選擇哪個? 00後李明的答案是後者。 今年3月,某二本院校應屆畢業生李明,兜兜轉轉,沒有找到特別合心的工作 卻憑著還不錯的游戲技術,成為了全職的游戲陪玩。 “按單收費,大概一單大概兩三百元,按時長收費,一小時50到100元”, ...
  • 滿漢樓02 4.功能實現04 4.6顯示所有菜品 4.6.1思路分析 創建一個菜單表menu,在Domain層創建與菜單表對應的Javabean-Menu類,在DAO層創建MenuDAO,完成對menu表的增刪改查,在Service層創建一個和menu表相關的service類,service類提供給 ...
  • 在筆者之前的文章`《驅動開發:內核特征碼搜索函數封裝》`中我們封裝實現了特征碼定位功能,本章將繼續使用該功能,本次我們需要枚舉內核`LoadImage`映像回調,在Win64環境下我們可以設置一個`LoadImage`映像載入通告回調,當有新驅動或者DLL被載入時,回調函數就會被調用從而執行我們自己... ...
  • 集合 Scala的集合有三大類: 序列Seq、集Set、映射Map 所有的集合都擴展自Iterable特質。對於幾乎所有的集合類 Scala都同時提供了可變和不可變的版本 可變集合 可以在適當的地方被更新或擴展。這意味著你可以修改,添加,移除一個集合的元素。 不可變集合 永遠不會改變。不過,你仍然可 ...
  • LRU:最近最少使用緩存 LRU是Least Recently Used的縮寫,即最近最少使用,是一種常用的頁面置換演算法,選擇最近最久未使用的頁面予以淘汰。該演算法賦予每個頁面一個訪問欄位,用來記錄一個頁面自上次被訪問以來所經歷的時間 t,當須淘汰一個頁面時,選擇現有頁面中其 t 值最大的,即最近最少 ...
  • 過濾組件 查詢所有才涉及到過濾,其他介面都不需要 restful規範中有一條,請求地址中帶過濾條件:分頁、排序、過濾統稱為過濾 內置過濾類 使用內置過濾類的步驟 必須是繼承GenericAPIView+ListModelMixin的之類視圖上 1.配置過濾類 filter_backends=[Sea ...
  • 兄弟們,為了幫助大家更加高效的摸魚,今天分享一個騷操作,Python自動安裝第三方庫! 為了體現小編在懶上的造就,今天再分享一個騷操作:Python自動安裝第三方庫,全自動不需要你動! pip手動安裝 一說Python要安裝哪個模塊,我們第一反應,win+r輸入cmd,pip instll 安裝~ ...
  • SpringIOC源碼 Spring源碼大綱 https://www.processon.com/view/link/5f5075c763768959e2d109df IOC載入流程圖 https://www.processon.com/view/link/5f15341b07912906d9ae8 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...