DBulbasaur C语言
Posted et_90000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DBulbasaur C语言相关的知识,希望对你有一定的参考价值。
目录
C语言中整型(int)与长整型(long long)在标准化输入输出中的占位符
题目
https://ac.nowcoder.com/acm/problem/17441
Silph company deployed a passenger flow analysis system in a clothing store that captures photos of human faces and photos of human bodies in real time.
In order to analyze the passenger flow better, the system will associate human faces with human bodies. In other words, there are some edges connecting faces with bodies. Each edge has a positive weight.
However, due to lack of precision and accuracy of the algorithms provided by this company, these associations may not be completely correct.
In a correct relationship, one human face can associate with multiple human bodies (one person may change multiple suits of clothes), but one human body cannot associate with multiple human faces.
Now Bulbasaur works as an intern at Silph company and the boss asks him to solve this problem.
Bulbasaur is supposed to find an association relationship, such that the sum of weights of the association edges is maximum.
输入描述:
The input starts with one line containing exactly one integer T, which is the number of test cases. For each test case, the first line contains three integers n, m and k, indicating the number of face photos, the number of body photos, and the number of existing association edges, respectively. Then followed by k lines, each consists of three integers ai, bi and ci, representing an edge weighted ci connecting the ai-th face photo with the bi-th body photo.
输出描述:
For each test case, output one line containing "Case #x: y", where x is the test case number (starting from 1) and y is the maximum sum of weights of the association edges.
示例1
输入
1
2 3 3
1 2 1919
1 3 810
2 2 450
输出
Case #1: 2729
题目分析:
- 设a=a_1...a_m为脸集合, b=b_1...b_n为身体集合。
- 1张脸可以对应多个身体 => a中可以有重复的元素
- 1个身体只能对应1张脸 => b中不可以有重复的元素
- 最后输出最大权重之和 => 如果输入的b中有重复的,取最大的权重
因此,为了检索更快,可以建立一个以b值为索引的数组res,res最多有max(b)个。
通过代码:
#include <stdio.h>
#include <stdlib.h>
int main()
int t;
scanf("%d", &t);
for(int t1 = 0; t1<t; t1++)
int n, m, k;
// 注意!
// 最后的sum最大可能是: 10^9 * 10^5 = 10^14
// int和long的范围为: -2147483647~2147483647( 10位数,约等于 10^10)
// long long(与 __int64相同)为真正的长整型,范围为:9223372036854775808~+9223372036854775807(九百亿亿,约10^19)
// 因此,sum 需要定义为long long
long long sum = 0;
scanf("%d %d %d", &n, &m, &k);
// 以b为键,b最大为m。
int res[m+1];
for(int i=0; i<m+1; i++)
res[i] = 0;
int count;
for(int i=0; i<k; i++)
int a1, b1, c1;
scanf("%d %d %d", &a1, &b1, &c1);
// 将b1对应的权重更新为最大的
if(res[b1]<c1)
res[b1] = c1;
for(int i=0; i<m+1; i++)
sum = sum +res[i];
// int 在标准化输入输出中的占位符是 %d
// long 在标准化输入输出中的占位符是 %ld
// long long 在标准化输入输出中的占位符是 %lld
printf("Case #%d: %lld\\n", t1+1, sum);
需要注意的:
C语言中整型(int)与长整型(long long)的范围
最后的sum最大可能是: 10^9 * 10^5 = 10^14
而,
- int和long的范围为: -2147483647~2147483647( 10位数,约等于 10^10)
- long long(与 __int64相同)为真正的长整型,范围为:-9223372036854775808~9223372036854775807(九百亿亿,约10^19)
因此,sum 需要定义为long long
long long sum = 0;
C语言中整型(int)与长整型(long long)在标准化输入输出中的占位符
- int 在标准化输入输出中的占位符是 %d
- long 在标准化输入输出中的占位符是 %ld
- long long 在标准化输入输出中的占位符是 %lld
因此,输出时,需要用
printf("Case #%d: %lld\\n", t1+1, sum);
数组的初始化
在定义完数组res后,对数组部分元素进行了赋值,当后面需要对其全部元素遍历加和时,不能默认其他元素就是0了,需要在定义后将所有元素初始化为0。
C语言诞生之前,都有哪些重要的编程语言?
你好,根据资料记载,C语言诞生前还有B语言和BCPL语言,C语言源自Ken Thompson发明的 B语言,而B语言则源自BCPL语言。C语言的诞生是和UNIX操作系统的开发密不可分的,原先的UNIX操作系统都是用汇编语言写的,1973年UNIX操作系统的核心用C语言改写,从此以后,C语言成为编写操作系统的主要语言。1978年美国电话电报公司(AT&T)贝尔实验室正式发布C语言,1983年由美国国家标准局开始制定C语言标准,于1989年12月完成,并在1990年春天发布,称之为ANSI C,有时也被称为 C89 或 C90。 参考技术A 最初的Unix是用汇编语言编写的,一些应用是由叫做B语言的解释型语言和汇编语言混合编写的。B语言在进行系统编程时不够强大,所以 Thompson和Ritchie对其(B语言)进行了改造,并与1971年共同发明了C语言。1973 年Thompson和Ritchie用C语言重写了Unix。在当时,为了实现最高效率,系统程序都是由汇编语言编写,所以Thompson和 Ritchie此举是极具大胆创新和革命意义的。用C语言编写的Unix代码简洁紧凑、易移植、易读、易修改,为此后Unix的发展奠定了坚实基础。 参考技术B
译者丨夏夜
策划丨万佳
这是一个计算机世界的编程时光之旅
对很多人来说,每当学习一门新的编程语言,写下的第一行代码可能都是“Hello,World!“。因此,”Hello,World!" 已经成为一段经典程序。
在职业生涯中,所有程序员都至少完成过一段“Hello,World!" 程序。在成长中,程序员通常会使用多种编程语言,大部分程序员甚至实现过十几种”Hello,World!”版本。
甚至还出现了一种衡量标准,叫做TTHW,用于评估程序员用新的编程语言实现一段“Hello, World!”程序并成功运行所花费的时间 。
但现在,如果我问你,你可以用多少种不同的编程语言编写“Hello,World!”,你会给出怎样的回答?为帮你回忆起来,我会向你展示怎样用 50 种不同的编程语言编写“Hello,World!”程序。这样,也能让你看到计算机编程语言多年的历史演进。
1. 汇编语言 - 1949 年
汇编语言创建于 1949 年,本文中,我会向你展示一段经典的汇编程序,这是为 Intel 8080 平台的 8 位处理器编写的,这款处理器于 1974 年 4 月下旬发布。
bdos equ 0005H ; BDOS entry pointstart: mvi c,9 ; BDOS function: output stringlxi d,msg$ ; address of msgcall bdosret ; return to CCP
msg$: db 'Hello, world!$'end start2.Fortran - 1957 年
Fortran 编程语言是 Formula Translation 的衍生版本。它是一种可编译的通用命令式编程语言,特别适用于数值和科学计算。Fortran 语言创建于 1957 年,以下是使用该语言第一个版本编写的“Hello, World!”程序:
PROGRAM HelloWRITE (*,*) 'Hello, World!'STOPEND
在 Fortran 90 或者 95 版本中,“Hello, World!”程序可以写为如下这样:
PROGRAM HelloWRITE (*,*) 'Hello, World!'END PROGRAM Hello3.Lisp - 1958 年
Lisp 是最古老的编程语言家族,它既是命令式语言,又是函数式语言。Lisp 最初创建于 1958 年,当时是作为展示程序的实用模型发布的。在 20 世纪 70 年代和 80 年代,Lisp 家族成为人工智能领域非常受欢迎的语言。
以下是用 Lisp 编写的“Hello, World!”程序:
(write-line "Hello, World!")4.Cobol - 1959 年
Cobol 正式创建于 1959 年,所以 Cobol 编程语言在 2019 年刚刚度过它的 60 周年纪念日。Cobol 是 COmmon Business Oriented Language 的缩写,人们发明它是希望将其作为业务编程应用的通用语言。2019 年,Cobol 在银行业和保险业中仍然应用广泛。
以下是用 Cobol 编写的“Hello, World!”程序:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO-WORLD.PROCEDURE DIVISION.DISPLAY "Hello, World!"STOP RUN.5.BASIC - 1964 年
BASIC 是 Beginner’s All-purpose Symbolic Instruction 的缩写,它是一种高级编程语言,这种语言的主要目标是容易使用,正如以下“Hello, World!”程序所证实的这样:
PRINT "Hello, World!"END6.Logo - 1968 年
Logo 语言很像 Lisp 语言,但比 Lisp 更容易使用,这正是 Logo 被发明出来的原因,正如人们通常所认为的那样,Logo 是“没有圆括号的 Lisp 语言”。
print [Hello World !]7.B - 1969 年
B 语言发明于 1969 年,这种语言现在已经被废弃,但它曾扮演了一个重要角色,它极大地促进了 C 语言的诞生,而现在 C 语言正被广泛使用着。
main()putstr("Hello world!*n");return(0);8.Pascal - 1970 年
Pascal 是一种命令式编程语言,创建于 1970 年。它是为教学而设计的,其特点是语法清晰、严谨,有助于生成良好的程序结构。
beginwriteln('Hello, World!')end.
Turbo Pascal 创建于 1983 年,它是为 Pascal 编程语言打造的集成开发环境。Turbo Pascal 在 20 世纪 80 年代和 90 年代取得巨大成功。
以下是 Turbo Pascal 中的“Hello, World!”程序:
program HelloWorld(output);beginwriteln('Hello, World!');readln;end.9.Forth - 1970 年
Forth 是一种基于命令式堆栈的计算机编程语言,由 Charles H. Moore 在 20 世纪 60 年代创建,但是,它的第一个主要版本是在 1970 年发布的。这门语言在 1994 年被 ANSI 标准化,并且在 1997 年被 ISO 采用。为这门语言送上美好的祝福吧,2014 年它甚至迎来了一个新版本,也就是 Forth 2012。
以下是 Forth 1970 版本的“Hello, World!”程序:
: HELLO ( -- ) ." Hello, World!" CR ;HELLO10.C - 1972 年
贝尔实验室的 Dennis Ritchie 和 Ken Thompson 在 1972 年开发 UNIX 时发明了 C 编程语言。Ken Thompson 之前已经发明了 B 语言。Dennis Ritchie 受到了 B 语言的启发,决定发明一种新的语言,即 C 语言,在其中引入了类型概念。
#include <stdio.h>
int main(void) printf("Hello, World!\\n");return 0;11.Smalltalk - 1972 年
Smalltalk 是一种面向对象的,具有反身性和动态类型的编程语言,发明于 1972 年,当时主要是受到 Lisp 语言的启发。Smalltalk 是最早一批具有集成开发环境的编程语言之一。
Transcript show: 'Hello, world!'; cr.12.Prolog - 1972 年
Prolog 是一种与人工智能和计算语言学相关的逻辑编程语言。Prolog 创建于 1972 年。
:- write('Hello, World!'),nl.13.ML - 1973 年
ML 是 Meta Language 的缩写,它是基于 Lisp 的函数式编程语言。ML 通常被认为是带有类型的 Lisp 语言。
print "Hello, World!\\n";14.Scheme - 1975 年
Scheme 创建于 1975 年,它是一种支持函数式和命令式的多范式编程语言。它是 Lisp 语言的 3 大变种之一,另外两个变种 Common Lisp 和 Clojure 的诞生要晚得多。
(display "Hello, World!") (newline)15.SQL - 1978 年
SQL 是 Structured Query Language 的缩写,它是操作关系型数据库的标准化计算机语言。尽管它不是用来创建简单的“Hello, World!”程序的,但是,照下面这样创建一个 SQL 程序却是非常有趣。
CREATE TABLE message (text char(15));INSERT INTO message (text) VALUES ('Hello, World!');SELECT text FROM message;DROP TABLE message;16.C++ - 1980 年
C++ 最初由 Bjarne Stroustrup 创建于 1980 年,和 C 语言同名,但是包含了 class(类)这个概念。C++ 语言正式命名为 C++ 是在 1983 年。
这门编程语言现在被 ISO 标准化了,在工业界以及其他领域被广泛使用。
#include <iostream>using namespace std;
int main() cout << "Hello, World!" << endl;return 0;17.Ada - 1983 年
Ada 是一种面向对象的编程语言,从 20 世纪 80 年代早期开始开发,并于 1983 年发布正式版本,即 Ada 1983。“Ada”这个名字用来纪念 Ada Lovelace,她被认为很大可能是历史上第一位女性计算机科学家。
Ada 通常用于实时系统和嵌入式系统,这些系统要求高度的可靠性和安全性。
with Ada.Text_IO;procedure Hello isbeginAda.Text_IO.Put_Line ("Hello, World!");end Hello;18.Common Lisp - 1984 年
Common Lisp 通常简写为 CL,是由 ANSI 标准化了的 Lisp 语言规范。
(princ "Hello, World!")19.MATLAB - 1984 年
MATLAB 是“Matrix Laboratory”的缩写,它是一种脚本语言,用于数值计算。MATLAB 在同名的开发环境中编写。
disp('Hello, World!')20.Eiffel - 1985 年
Eiffel 是一种围绕一种设计方法而设计的面向对象编程语言。Eiffel 基于当今非常流行的概念,如契约编程或重用等。
classHELLO_WORLDcreatemakefeaturemakedoprint ("Hello, world!%N")endend21.Objective-C - 1986 年
Objective-C 是一种反身式的面向对象编程语言。它是 C 编程语言的扩展,就像 C++ 一样,但是和 C++ 又不一样,特别是在动态消息分发或者动态加载方面与 C++ 很不一样。
当今,它主要用于苹果操作系统:macOS 及其衍生的 iOS 系统中。
#import <Foundation/Foundation.h>
int main() @autoreleasepool NSLog(@"Hello, World!");22.Erlang - 1986 年
Erlang 这种编程语言支持多种范式:并发、实时和分布式。它独具特色的层是基于参与者(actor)模型的,具有容错和热代码更新功能,允许开发具有极高可用性的应用程序。
io:format("Hello world!~n").23.Perl - 1987 年
Perl 编程语言由 Larry Wall 创建于 1987 年,是为更容易地处理基于文本的信息而创建的。Perl 是一种解释性语言,它受到了 C 语言的控制结构和打印结构的启发,同时也受到了 shell 脚本语言的启发。
print "Hello, World!\\n";24.Caml - 1987 年
Caml 是 Categorical Abstract Machine Language 的缩写,它是一种面向程序安全性和可靠性的通用编程语言。Caml 支持函数式、命令式和面向对象的编程风格。它也是一种非常独特的语言。
print_string "Hello, World!\\n";;25.Tcl - 1988 年
Tcl 是 Tool Command Language 的缩写,它是一种脚本语言,由 John Ousterhout 在 1988 年开发出来的。这种动态类型语言是跨平台的、可扩展的、易于学习的,并且基于 12 条语法规则。Tcl 很容易与 C 编程语言交互。
在 1990 年,John Ousterhout 开发出了 Tcl 的一个扩展,叫做 Tk,它是一个用于创建可移植图形接口的代码库。现在,当我们谈起 Tcl 时,我们更多地是在谈论 Tcl/Tk 这个组合。
puts "Hello, World!"26.Haskell - 1990 年
Haskell 是一种函数式的编程语言,它基于 lambda 计算和组合逻辑。
main = putStrLn "Hello, World!"27.Python - 1991 年
Python 是一种解释性编程语言,具有多范式、多平台的特点。Python 支持结构化、函数式和面向对象的命令式编程。
这些年来, Python 变得非常流行,甚至在 2019 年成为最受欢迎的语言之一。
以下是用 Python 3.0 或更高版本编写的“Hello, World!”程序:
print("Hello, World!")28.Visual Basic - 1991 年
Visual Basic,简称为 VB,它是第三代事件编程语言,也是微软创建的集成开发环境,用于其 COM 编程模型。
Public Sub Main()Debug.Print "Hello, World!"End Sub29.Lua - 1993 年
Lua 创建于 1993 年,它是一种反身式、命令式脚本语言,用于嵌入在其他应用程序中来扩展这些应用程序的功能。
print("Hello, World!")30.Ruby - 1995 年
由于对 Smalltalk 和 Lisp 的开发经历感到失望,Yukihiro Matsumoto 于 1993 年开始用 Emacs 设计 Ruby 语言。
他在 1995 年发布了该语言的第一个版本。Ruby 是一种解释性的、面向对象的多范式语言。
puts 'Hello, World!'31.Java - 1995 年
Java 是 James Gosling 在 1995 年创建的一种面向对象的编程语言,它至今仍然是工业界最受欢迎和使用最多的语言。
你能够使用 Java 做任何事情,从客户端到 Web 应用无所不包;而且 Google 选择 Java,用在 Android 操作系统上作为开发应用程序的语言,这又进一步扩展了 Java 能力。
class HelloWorld public static void main(String[] args) System.out.println("Hello, World!");32.JavaScript - 1995 年
JavaScript 是一种脚本语言,主要用于 Web 开发,但现在可以用于服务端,比如 Node.js。JavaScript 是面向原型的编程语言,这种语言里的函数是第一类对象。
document.write('Hello, World!');33.PHP - 1995 年
1995 年绝对是编程语言非常重要的一年,因为在 Java 和 JavaScript 之后,PHP 也在这一年被发明出来。PHP 主要用于 Web,它是一种面向对象的命令式语言,能够像其他任何解释性语言一样在本地运行。
<? echo "Hello, World!" ?>34.Rebol - 1997 年
Rebol 是一种高级脚本编程语言,建立在指代语义的基础上,自称为“消息传递语言”。以下是用 Rebol 编写的“Hello, World!”程序:
print "Hello, World!"35.ActionScript - 1998 年
ActionScript 这种编程语言,可用于客户端应用程序(例如 Adobe Flash 和 Adobe Flex)和服务器(Flash 媒体服务器,JRun 和 Macromedia Generator)。ActionScript 现在作为一种脚本语言,用于 Unity 图形引擎之中。
package public class HelloWorld public function HelloWorld() trace("Hello World !");36.D - 1999 年
D 是一种命令式、面向对象的多范式编程语言,用于系统编程。D 的发明受到许多语言的启发,包括 C++、Java 和 Eiffel。尽管 D 语言有很多优点,但是它从未获得其发明者所期望的成功。
import std.stdio;
void main () writefln("Hello, World!");37.C# - 2000 年
C# 是微软于 2000 年与 Sun 就 Java 语言发生争执后创建的。C# 是一种面向对象的编程语言,用于 Microsoft.Net 平台上的开发工作。该语言派生自 C++ 和 Java,使用了它们的一些通用语法和其他许多概念。
C# 也可以用于开发 ASP.Net 平台上的 Web 应用程序。
using System;
internal static class HelloWorld private static void Main() Console.WriteLine("Hello, World!");38.Groovy - 2003 年
Groovy 是一种面向对象的编程语言,运行在 Java 平台上。Groovy 是这个平台的 Java 语言的替代品,受到了 Python 、 Ruby 或者是 Smalltalk 语言的启发。
println "Hello, World!"39.Scala - 2003 年
Scala 是一种多范式编程语言,被设计用于简洁优雅地表示通用编程模型。Scala 采用静态类型,集成了面向对象和函数式编程范式。
object HelloWorld extends App println("Hello, World!")40.F# - 2005
F# 是一种函数式、命令式和面向对象的编程语言,由微软为其.NET 平台而开发。F# 从 OCaml 编程语言衍生而来,而且与 OCaml 具有高度兼容性。这两种编程语言与 ML 语言属于同一种语系。
printfn "Hello, World!"41.Windows PowerShell - 2006 年
Windows PowersShell 是由微软开发的一套软件,它包含了命令行接口、一种称作 PowerShell 的脚本语言和一个开发包。从 Window 7 开始,PowerShell 就作为微软操作系统的标配。
echo "Hello, World!"42.Clojure - 2007 年
Clojure 是一种可编译的、跨平台的函数式编程语言,用于创建安全的和易分布式运行的程序。Clojure 是 Lisp 语言的 3 大变种之一。Clojure 可转换为 Java 字节码、JavaScript 代码和.NET 字节码。因此,Clojure 可以在 JVM、CLR、浏览器和 Node.js 上使用。
(println "Hello, World!")43.Go - 2009 年
Go 是一种可编译的、并发式编程语言,受到了 C 和 Pascal 语言的启发而发明的。这种语言是由谷歌开发的,它是从 Robert Griesemer、Rob Pike 和 Ken Thompson 最初提出的概念发展而来的。这位 Ken Thompson 正是在 1969 年创造了 B 语言的那位 Ken Thompson!
package main
import "fmt"
func main() fmt.Println("Hello, World!")44.Rust - 2010
Rust 是由 Mozilla 开发的一种多范式、可编译的编程语言。Rust 被设计成为“安全的、并发的、实用的语言”,同时在某些方面支持纯函数式编程风格、参与者模型、过程式编程以及面向对象编程。Rust 通常被描述为 C++ 的潜在继承者之一。
fn main() println("Hello, World!");45.Dart - 2011 年
Dart 是谷歌开发的一种 Web 编程语言。它最初的目的是要替换 JavaScript。目前,Dart 还没有达到它的目标,开发人员更喜欢将 Dart 转换成与现代所有浏览器兼容的 JavaScript 代码,Dart 还可以用于服务端编程。
Dart 是 Flutter 用于开发移动应用程序的语言。
main() print('Hello, World!');46.Kotlin - 2011 年
Kotlin 是一种面向对象的、函数式编程语言,它具有静态类型,允许针对 Java 虚拟机、JavaScript 和本地的多种平台进行编译(多亏了 LLVM)。2017 年,谷歌继 Java 之后,把 Kotlin 作为 Android 官方支持的第二种编程语言。
fun main(args: Array<String>) println("Hello, World!")47.Ceylon - 2011 年
Ceylon 是由红帽(Red Hat)创建出来的,它是一种高级开源编程语言,具有强类型和静态类型。它的语法和 Java 的很像。它能编译为 Java 字节码或者 JavaScript。
void hello() print("Hello, World!");48.TypeScript - 2012 年
TypeScript 是由微软开发的免费开源的编程语言,旨在提升 JavaScript 代码的开发效率,保证 JavaScript 代码的安全性。TypeScript 语言是 JavaScript 的一个超集,它被转换成 JavaScript,这样任何 Web 浏览器或 JavaScript 引擎都可以解释它。
console.log("Hello, World!");49.Julia - 2012 年
Julia 是一种高级的、强大的和动态的编程语言,用于科学计算,熟悉其他开发环境(如 MATLAB、R 或者 Python)的用户应该很了解 Julia 的语法。
println("Hello, World!")50.Swift - 2014 年
Swift 是一种可编译的、多范式的对象编程语言,其设计目标是简单、高性能和安全。它是由苹果公司开发的开源项目,这使得它与 Objective-C 一起成为了开发移动 iOS 应用程序的解决方案。
print("Hello, World!")总结
这次在计算机编程语言世界里进行的跨度达 70 年的时光旅行,向你介绍了用 50 种不同语言编写的“Hello, World!”程序。
以上编程语言清单只占到人们发明的所有编程语言的一小部分,我邀请你在评论区分享你最喜欢的语言所编写的“Hello, World!”程序,但请不要和上面清单上的语言重复哦。
https://medium.com/javarevisited/70-years-of-hello-world-with-50-programming-languages-2400de893a97
InfoQ 读者交流群上线啦!各位小伙伴可以扫描下方二维码,添加 InfoQ 小助手,回复关键字“进群”申请入群。大家可以和 InfoQ 读者一起畅所欲言,和编辑们零距离接触,超值的技术礼包等你领取,还有超值活动等你参加,快来加入我们吧!
QCon 北京 2020 全新起航,来跟业界大牛关注 23+ 技术领域中正在兴起的技术和关键进展。目前大会 7 折报名最后一周,点击【阅读原文】或识别二维码了解更多。有任何问题欢迎联系票务小姐姐 Ring:17310043226(微信同号)
参考技术C计算机的基础,是硬件,这是由电子专业的技术人员,研制出来的。
同时,他们也制定了最基本的计算机语言:【机器语言】。
之后,电子专业的技术人员,又根据机器语言,一一对应的,写出了【汇编语言】。
以后,不懂计算机的人,就可以用汇编语言来编程了。
再以后,才出现的【高级语言】,如 C 语言。
计算机语言,就是这么开发出来的。
别忘了采纳。
以上是关于DBulbasaur C语言的主要内容,如果未能解决你的问题,请参考以下文章