杭电OJ 输入输出练习汇总
主题
Calculate a + b
杭电OJ-1000
Input
Each line will contain two integers A and B. Process to end of file.
Output
For each case, output A + B in one line.
Mine
#include <stdio.h> int main()
{
int a,b;
while(~scanf("%d %d",&a,&b)) //多次输入a和b。
{
printf("%d\n",a+b);
}
} /***
while(~scanf("%d %d",&a,&b)) 多次输入a和b。
这句话中的“~”符号可以理解为“重复”,代码含义是反复执行scanf(“%d %d”,&a,&b) 语句,直到语句接收不到有效结果。换一种说法就是while语句会在括号中的判断为真的情况执行语句,那么对于scanf函数而言,判断为真也就是接收到了有效数据。而~符号代表无限重复,直到scanf语句不能取到有效的值为止(while的括号中判断为假),循环跳出。
***/
Review
题目: 接收两个整数并返回两个数的和。
需要注意的是题目中说明了每行两个数据,但并没有说明多少行。换一种常用说法叫:“多组数据”,是常见的要求。但没有C语言算法书会写明接收多组数据的方式。
杭电OJ-1001
Description
calculate SUM(n) = 1 + 2 + 3 + ... + n.
Input
The input will consist of a series of integers n, one integer per line.
Outpu
For each case, output SUM(n) in one line, followed by a blank line. You may assume the result will be in the range of 32-bit signed integer.
Mine
#include<stdio.h> int main()
{
int x,n,sum;
scanf("%d",&x);
scanf("%d",&n);
for(x=1;x<=n;x++)
{
sum=0;
sum=sum+x;
}
printf("1\n%d",sum); }
Writeup
#include <stdio.h>
int main()
{
int a;
int sum=0;
while((scanf("%d",&a))!=EOF){
for(int i=0;i<=a;i++)
sum = sum+i;
printf("%d\n\n",sum);
sum = 0;
}
return 0;
}
Review
- 我的问题在于没有考虑连续读取的可能性,好像对输入输出有误解T-T
- 有一个疑问:输入输出需要和sample一样的格式吗?
- 本身是一个前N项和的累加问题,如果用公式法也是no accept,原因是S=(1+n)*n/2中乘法容易造成溢出,而循环累加的好处在于溢出的可能比较小。
杭电OJ-1002
Description
Given two integers A and B, your job is to calculate the Sum of A + B.
Input
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.
Output
For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.
手写代码@V1-20210805
#include<stdio.h>
#include<string.h>
#define max 1005 int main()
{
int a[max],b[max],c[max];
while(~scanf("%s1 %s2",s1,s2))
{
int i,j,k;
i=0;j=0;
k=strlen(s1)>strlen(s2)?strlen(s1):strlen(s2) for(i;i<=k;i++) //k有无定义的必要?
{
a[]=s1; //好像不太合适?字符数组能直接赋值给数组吗?查一下书
b[]=s2; //似乎需要循环读入? c[i]=a[i]+c[i];
if(c[i]>=10)
{
c[i]=c[i]%10;
c[i+1]++; //s2的长度是必要的吗?
}
}
for(j=0;j<=k;j++)
{
printf("%d",a[j]); //哪里有点奇怪
}
} }
v1现在存在的问题
- 读入的顺序和相加的顺序不太对?要处理一下?[n-i]好像可行?
- 输出的时候应该是逆序?
- 需要加一个读入的限制条件:读取正整数?
- 题目要求的输入输出 用一个循环?
手写代码@V2-20210806
#include<stdio.h>
#include<string.h>
#define max 1010 int main()
{
int T,u,n,i,j;
char s1[max],s2[max],c[max];
scanf("%d",&T);
while(T>=1 && T<=20)
{
for(u=0;u<=T;u++)
{
scanf("%s %s",s1,s2);
} n =strlen(s1)>strlen(s2)?strlen(s1):strlen(s2); for(i=2 ; i<=n ; i++)
{
c[n-i]=s1[n-i]+s2[n-i];
if(c[i]>=10)
{
c[n-i]=c[n-i]%10;
c[n-i-1]++; //没有考虑不是同位数的情况
}
} for(j=0;j<=n;j++)
{
printf("case %d:\n",u);
printf("%s + %s = %d\n",s1,s2,c[j]);
} } }
writeup-0806
#include<stdio.h>
#include<string.h>
#define max 1000+10 /**
* 1. define the variable
**/ int a[max],b[max];
char str1[max],str2[max]; int main(){ int m; //test number T?
int k=1;
scanf("%d",&m); // read T? /**
*2.read number and make sure input.
this part is to read the big number and covert to array
**/ while(m--){ //this circle ie funny! it's better than mine which use more variable u. scanf("%s %s",str1,str2); //read big number
memset(a,0,sizeof(a));
memset(b,0,sizeof(b)); //memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。 int i,j;
for(i=0,j=strlen(str1)-1;i<strlen(str1);i++){ //it's similar to my code ,i use the i=1 to replace len
a[j--]=str1[i]-'0'; //string1 covert to array1?
} for(i=0,j=strlen(str2)-1;i<strlen(str2);i++){ //two strlen conditions,less code ,nice~
b[j--]=str2[i]-'0'; //string2 to array2? why not combine with above 'for cicle' together ?
}
/**
* 3. add two big number
**/
for(i=0;i<max;i++){
a[i]+=b[i];
if(a[i]>=10){
a[i]-=10; //mine : a[i]=a[i]%10
a[i+1]+=1; //similar~
}
}
/**
* 4.output
*
**/
printf("Case %d:\n",k++); // k has been defined and value=1?
printf("%s + %s = ",str1,str2);
for(i=max-1;(i>=0)&&(a[i]==0);i--); //reverse output?(i>=0)&&(a[i]==0) what's mean? only deal the 10?
if(i>=0){
for(;i>=0;i--){
printf("%d",a[i]);
}
}
else printf("0");
if(m!=0) printf("\n\n");
else printf("\n"); //not clear..
}
return 0;
}
Review
- 大数加法问题一般考虑数组进行存储,然后按位相加满十进一。
- 再看Writeup时发现大家再提java,
import java.util.Scanner,以及大数需要import java.math.BigInteger,且BigInterger相加不是"a+b",而是"a.add(b)",就可以很好的解决大数问题。
import java.util.Scanner;
import java.math.BigInteger;
public class Main{
public static void main(String args[]){
BigInteger a,b;
int T;
int n=1;
Scanner in = new Scanner(System.in);
T=in.nextInt();
while(T>0){
a=in.nextBigInteger();
b=in.nextBigInteger();
System.out.println("Case "+n+":");
System.out.println(a+" + "+b+" = "+a.add(b));
if(T!=1) System.out.println();
T--;
n++;
}
}
}
杭电OJ-1089
Input
The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.
Output
For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.
**Mine **- accepted
#include<stdio.h> int main()
{ int a,b;
while(~scanf("%d %d",&a,&b))
{
printf("%d\n",a+b); }
return 0; }
杭电OJ-1090
Input
Input contains an integer N in the first line, and then N lines follow. Each line consists of a pair of integers a and b, separated by a space, one pair of integers per line.
Output
For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.
Mine
#include<stdio.h> int i,a,b,c;
int main()
{
while(~scanf("%d",&i))
{
for(c=1;c<=i;c++)
{
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
}
}
}
杭电OJ-1091
Input
Input contains multiple test cases. Each test case contains a pair of integers a and b, one pair of integers per line. A test case containing 0 0 terminates the input and this test case is not to be processed.
Output
For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.
Mine
#include<stdio.h> int a,b;
int main()
{
while(~scanf("%d %d",&a,&b))
{
if(a==0 && b==0)
{return 0;}
else
{
printf("%d\n",a+b);
}
}
}
杭电OJ-1092
Input
Input contains multiple test cases. Each test case contains a integer N, and then N integers follow in the same line. A test case starting with 0 terminates the input and this test case is not to be processed.
Output
For each group of input integers you should output their sum in one line, and with one line of output for each line in input.
Mine
#include<stdio.h> //始终是wrong... int main()
{
int a,n,sum;
while(scanf("%d",&n)!=EOF && n!=0)
{
while(n--)
{
scanf("%d",&a);
sum=0;
sum+=a;
}
printf("%d\n",sum);
}
return 0;
}
Writeup
#include<stdio.h>
int main()
{
int a[10000];
int n, i, s;
while (scanf("%d", &n) && n)
//输入正确scanf返回1,n!=0继续输入
{
for (i = s = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < n; i++)
{
s = s + a[i];
}
printf("%d\n", s);
}
return 0;
}Review
没有考虑到大数的可能,存在溢出问题,用数组存放更为合理
杭电OJ-1093
Input
Input contains an integer N in the first line, and then N lines follow. Each line starts with a integer M, and then M integers follow in the same line.
Output
For each group of input integers you should output their sum in one line, and with one line of output for each line in input.
Mine
#include<stdio.h> //wrong answer... int main()
{
int i,j,k,s;
int a[1000];
while(~scanf("%d",&i))
{
for(i;i>=1;i--)
{
while(scanf("%d",&j)!=EOF && j)
{
for(j;j>=0;j--)
{
scanf("%d", &a[i]);
}
for (k= 0; k< j; k++)
{
s += a[i];
}
printf("%d\n", s);
}
}
}
}writeup
#include<stdio.h>
int main()
{
int n,i,m,sum; //n是行数,m是加数个数
scanf("%d",&n);
while(n--) //简洁!
{
sum=0;
scanf("%d",&m);
while(m--) //两个-- 简洁欸!
{
scanf("%d",&i);
sum=sum+i;
}
printf("%d\n",sum);
}
return 0;
}
Review
所以上一道题不是大数的原因?? (((φ(◎ロ◎;)φ)))
杭电OJ-1094
Input
Input contains multiple test cases, and one case one line. Each case starts with an integer N, and then N integers follow in the same line.
Output
For each test case you should output the sum of N integers in one line, and with one line of output for each line in input.
Mine
#include<stdio.h> int main()
{
int n,m,sum;
while(~scanf("%d",&n))
{
sum = 0;
while(n--)
{
scanf("%d",&m);
sum += m;
}
printf("%d\n",sum);
}
}
杭电OJ-1095
Input
The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.
Output
For each pair of input integers a and b you should output the sum of a and b, and followed by a blank line.
Mine
#include<stdio.h>
int main()
{
int a,b;
while(~scanf("%d %d",&a,&b))
{
printf("%d\n",a+b);
printf("\n");
}
return 0;
}
杭电OJ-1096
Input
Input contains an integer N in the first line, and then N lines follow. Each line starts with a integer M, and then M integers follow in the same line.
Output
For each group of input integers you should output their sum in one line, and you must note that there is a blank line between outputs.
Mine
#include<stdio.h>
int main()
{
int n,m,i;
int sum;
while(~scanf("%d\n",&n)) //行数
{
while(n--)
{
scanf("%d",&m); //加数个数
sum = 0;
while(m--)
{
scanf("%d",&i);
sum += i;
}
printf("%d\n",sum);
if(m!=0)
printf("\n",sum);
}
}
}
杭电OJ 输入输出练习汇总的更多相关文章
- C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~
暑假集训虽然很快乐,偶尔也会比较枯燥,,这个时候就需要自娱自乐... 然后看hdu的排行榜发现,除了一些是虚拟测评机的账号以外,有几个都是AC自动机器人 然后发现有一位作者是用网页填表然后按钮模拟,, ...
- 杭电oj 2095 & 异或^符号在C/C++中的使用
异或^符号,在平时的学习时可能遇到的不多,不过有时使用得当可以发挥意想不到的结果. 值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终 ...
- 用python爬取杭电oj的数据
暑假集训主要是在杭电oj上面刷题,白天与算法作斗争,晚上望干点自己喜欢的事情! 首先,确定要爬取哪些数据: 如上图所示,题目ID,名称,accepted,submissions,都很有用. 查看源代码 ...
- 杭电oj 4004---The Frog Games java解法
import java.util.Arrays; import java.util.Scanner; //杭电oj 4004 //解题思路:利用二分法查找,即先选取跳跃距离的区间,从最大到最小, // ...
- 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)
今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...
- 杭电oj————2057(java)
question:A+ B again 思路:额,没啥思路/捂脸,用java的long包里的方法,很简单,只是有几次WA,有几点要注意一下 注意:如果数字有加号要删除掉,这里用到了正则表达式“\\+” ...
- 爬取杭电oj所有题目
杭电oj并没有反爬 所以直接爬就好了 直接贴源码(参数可改,循环次数可改,存储路径可改) import requests from bs4 import BeautifulSoup import ti ...
- 『ACM C++』HDU杭电OJ | 1418 - 抱歉 (拓扑学:多面体欧拉定理引申)
呕,大一下学期的第一周结束啦,一周过的挺快也挺多出乎意料的事情的~ 随之而来各种各样的任务也来了,嘛毕竟是大学嘛,有点上进心的人多多少少都会接到不少任务的,忙也正常啦~端正心态 开心面对就好啦~ 今天 ...
- 杭电OJ——1198 Farm Irrigation (并查集)
畅通工程 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...
随机推荐
- 10 一键部署LNMP网站平台
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin NGINX_V=1.19.1 P ...
- 「一本通 3.1 练习 4」Tree 题解
题目描述 原题来自:2012 年国家集训队互测 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 条白色边的生成树.题目保证有解. 输入格式 第一行V,E,need 分别表示点数, ...
- hdu 6048 Puzzle 拼图 逆序数
关于拼图和逆序数的关系可以看看这个 http://www.guokr.com/question/579400/ 然后求逆序数在判断就行了 按题意生成原始排列,观察发现,每一轮数后方比该数小的数的数量( ...
- 多元统计之因子分析模型及Python分析示例
1. 简介 因子分析是一种研究观测变量变动的共同原因和特殊原因, 从而达到简化变量结构目的的多元统计方法. 因子分析模型是主成分分析的推广, 也是利用降维的思想, 将复杂的原始变量归结为少数几个综合因 ...
- Java实验项目二——小学生考试系统(简单四则运算)
Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建 ...
- js--ES6新特性之解构
前言 es6 中引入了解构这一新特性,了解解构成为一个格合前端必须掌握的基础知识,不仅作为了面试的重要考查知识,同时能极大提高我们平常工作的开发效率.本文来总结一下需要掌握的解构知识点. 正文 1.什 ...
- Python - 字符串常用函数详解
str.index(sub, start=None, end=None) 作用:查看sub是否在字符串中,在的话返回索引,且只返回第一次匹配到的索引:若找不到则报错:可以指定统计的范围,[start, ...
- 小白都能理解的TCP三次握手四次挥手
前言 TCP在学习网络知识的时候是经常的被问到知识点,也是程序员必学的知识点,今天小杨用最直白的表述带大家来认识认识,喜欢的朋友记得点点关注哈. 何为TCP 上点官方的话:是一种面向连接(连接导向)的 ...
- 攻防世界-crypto-Decrypt-the-Message(Poem Codes-诗歌密码)
题目来源:su-ctf-quals-2014题目描述:解密这段信息! 下载附件,内容如下 The life that I have Is all that I have And the life th ...
- Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序
一个微服务应用程序,允许用户为他们最喜欢的表情符号(emoji)投票,并跟踪排行榜上收到的投票.愿最好的 emoji 获胜. 该应用程序由以下 3 个服务组成: emojivoto-web:Web 前 ...