杭电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 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...
随机推荐
- [源码解析] 深度学习分布式训练框架 horovod (8) --- on spark
[源码解析] 深度学习分布式训练框架 horovod (8) --- on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (8) --- on spark 0x00 摘要 0 ...
- excel VBA把一个单元格内容按逗号拆分并依次替换到另一个单元格的括号里面(本题例子,把文本中的括号换成{答案}的格式,并按顺序填空)
方法1:运用excel单元格拆分合并实现 思路:用VBA正则查询左侧括号个数,对右侧单元格逐一按逗号.顿号等符号分列,同时左侧按括号分列(分列只能按括号单边分列),分列完成后按要求合并,本题事例把括号 ...
- Unity中的.Meta文件
.meta文件是用于辅助管理Unity资源文件的文件,删除后,Unity会自动生成,里面记录了各个资源Inspector的信息,属性等等,Unity是不会改变源资源文件的,没有意义,它是靠.meta文 ...
- 创建Cloudflare CDN
背景说明: XX全球版项目CDN, 原有改之前:主CDN为Akamai,备CDN为Cloudflare. 计划改之后:主CDN为Cloudflare,备CDN为Akamai. 原因:Akamai CD ...
- 【PC桌面软件的末日,手机移动端App称王】写在windows11支持安卓,macOS支持ios,龙芯支持x86和arm指令翻译
面对这场突如其来的变革,作为软件开发者,应该如何选择自己今后的发展方向?桌面软件开发领域还有前景吗? 起源 自从苹果发布m1处理器,让自家Mac支持IOS移动端app运行之后,彻底打破了移动端app和 ...
- .net获取项目根目录方法集合
这篇文章是别的博客复下来,收藏的: 编写程序的时候,经常需要用的项目根目录.自己总结如下 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory ...
- CentOS-配置YUM源加速(阿里云、Nexus3)
备份本地源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 配置CentOS6(aliyun ...
- shiro框架基础
一.shiro框架简介 Apache Shiro是Java的一个安全框架.其内部架构如下: 下面来介绍下里面的几个重要类: Subject:主体,应用代码直接交互的对象就是Subject.代表了当前用 ...
- 线程中的yield()
属于本地方法 /** * A hint to the scheduler that the current thread is willing to yield * its current use o ...
- Java实验项目三——递归实现字符串查找和替换操作
Program:按照下面要求实现字符串的操作: (1)设计一个提供下面字符串操作的类 1)编写一个方法,查找在一个字符串中指定字符串出现的次数. 2)编写一个方法,参数(母字符串,目标字符串,替换字符 ...