南阳oj水题集合,语言的灵活运用
a+b
输入
输入两个数,a,b
输出
输出a+b的值
样例输入
2 3
样例输出
5
c/c++
#include<iostream>
using namespace std;
int main() { int a,b;
cin>>a>>b;
cout<<(a+b);
}
java
import java.util.Scanner; public class Main{//ACM中,提交的时候记得不要带package,而且类名一定要写Main,带上package会超时
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.println(a+b);
} }
虽然这两道题很简单但是主要是用来熟悉语言的应用
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
ASCII码排序
时间限制:3000 ms | 内存限制:65535 KB
难度:2
描述
输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。
输入
第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。
输出
对于每组输入数据,输出一行,字符中间用一个空格分开。
样例输入
2
qwe
asd
样例输出
e q w
a d s
c/c++
#include<iostream>
using namespace std;
int main() { int n ;
char a,b,c,temp;
cin>>n;
while(n--)
{
cin>>a>>b>>c;
if(a>b)
{
temp=a;
a=b;
b=temp;
}
if(a>c)
{
temp=a;a=c;c=temp;
}
if(b>c)
{
temp=b;b=c;c=temp;
} cout<<a<<" "<<b<<" "<<c<<endl;
} }
java
import java.util.Arrays;
import java.util.Scanner; public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for(int i=0;i<n;i++)
{
char[]ch = new char[3];
String str = scanner.next();
ch = str.toCharArray();将字符串转化成字母存放到数组里面
Arrays.sort(ch);//对ch数组进行sort排序,注意Arrays.sort()的用法
System.out.println(ch[0]+" "+ch[1]+" "+ch[2]); }
} }
Arrays.sort():数组的sort排序
toCharArray():将字符串转换成呢单字符然后存放到数组中
虽然用java在时间还是空间上超过了c
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Fibonacci数
时间限制: ms | 内存限制: KB
难度:
描述
无穷数列1,,,,,,,,,...称为Fibonacci数列,它可以递归地定义为
F(n)= ...........(n=1或n=)
F(n)=F(n-)+F(n-).....(n>)
现要你来求第n个斐波纳奇数。(第1个、第二个都为1)
输入
第一行是一个整数m(m<)表示共有m组测试数据
每次测试数据只有一行,且只有一个整形数n(n<)
输出
对每组输入n,输出第n个Fibonacci数
样例输入 样例输出
java
package day05; import java.util.Scanner; public class Main { public static void main(String[] args) {
int []a = new int[22];
a[0]=1;
a[1]=1;
a[2]=2;
for(int i=3;i<20;i++)
{
a[i] = a[i-1]+a[i-2]; }
// System.out.println(a);
// for(int i=0;i<22;i++)
// System.out.println(a[i]);
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for(int i=0;i<n;i++)
{
int j = scanner.nextInt();
System.out.println(a[j-1]); } } }
c/c++
#include<iostream>
using namespace std;
int main()
{
int a[];
int n;
int i;
a[]=;
a[]=;
a[]=;
for(i=;i<=;i++)
{
a[i] =a[i-]+a[i-];
// cout<<a[i]<<endl;
} cin>>n;
while (n--)
{
cin>>i;
cout<<a[i-]<<endl;
} }
注意有递推关系的数列,一定要有起始的数字定义,然后将整个数组根据规律全都赋值
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
素数求和问题
时间限制:3000 ms | 内存限制:65535 KB
难度:2
描述
现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。
输入
第一行给出整数M(0<M<10)代表多少组测试数据
每组测试数据第一行给你N,代表该组测试数据的数量。
接下来的N个数为要测试的数据,每个数小于1000
输出
每组测试数据结果占一行,输出给出的测试数据的所有素数和
样例输入
3
5
1 2 3 4 5
8
11 12 13 14 15 16 17 18
10
21 22 23 24 25 26 27 28 29 30
样例输出
10
41
52
c/c++
#include<iostream>
#include<math.h>
using namespace std; int main()
{
int t,n;
cin>>t;
while(t--)
{ int sum=;
cin>>n;
while(n--)
{
int a,i;
cin>>a; for( i=;i<=sqrt(a);i++)
{
if(a%i==)
break; if((a%i!=))
continue;
}
if(i>sqrt(a)&&(a!=))
sum+=a; }
cout<<sum<<endl; }
}
java
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
while(t-->0)
{
int n = scanner.nextInt();
int sum=0;
while(n-->0)
{ int i;
int a = scanner.nextInt();
for(i=2;i<=Math.sqrt(a);i++ )
{
if(a%i==0)
break;
if(a%i!=0)
continue; }
if((i>Math.sqrt(a))&&(a!=1))
sum +=a;
}
System.out.println(sum); } } }
1不是素数
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
素数距离问题
时间限制: ms | 内存限制: KB
难度:
描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(<N<=)
接下来的N行每行有一个整数M(<M<),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入 样例输出
c/c++
#include<iostream>
#include<math.h>
using namespace std;
int sushu(int x)
{ int i,flag;
for( i=;i<=sqrt(x);i++)
{
if(x%i==)
{
flag=;
break;
} if(x%i!=)
{
continue;
} }
if(i>sqrt(x))
{
flag=;
}
return flag;
} int main()
{
int n;
cin>>n;
while(n--)
{
int m,left,right,l,r;
cin>>m;
if(m==)
{
cout<<<<" "<<<<endl;
}
else if(sushu(m)!=)
{
cout<<m<<" "<<<<endl;
} else
{
for(l=m;l>;l--)
{
if(sushu(l)!=)
{
left = m-l;
break;
}
else
continue;
}
for(r=m; ;r++)
{
if(sushu(r)!=)
{
right = r-m;
break;
}
else
continue;
}
if(right<left)
cout<<r<<" "<<right<<endl;
else
cout<<l<<" "<<left<<endl;
} } }
关键注意1的问题
java
import java.util.Scanner; public class Main {
public static int sushu(int x)
{
int i,flag = 0;
for(i=2;i<=Math.sqrt(x);i++)
{
if(x%i==0)
{
flag=0;
break;
}
if(x%i!=0)
{ continue;
} }
if(i>Math.sqrt(x))
flag=1;
return flag;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
while(n-->0)
{ int l,left = 0,r,right=0;
int m = scanner.nextInt();
if(m==1)
System.out.println("2"+" "+"1");
else if(sushu(m)==1)
{
System.out.println(m+" "+0); }
else
{
for(l=m;l>1;l--)
{
if(sushu(l)==1)
{
left = m-l;
break;
}
else
continue; }
for(r=m; ; r++)
{
if(sushu(r)==1)
{
right = r-m;
break;
}
else
continue;
} if(right<left)
{
System.out.println(r+" "+right);
}
else
{
System.out.println(l+" "+left); }
} } } }
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
A Famous Music Composer
- 描述
-
Mr. B is a famous music composer. One of his most famous work was his set of preludes. These 24 pieces span the 24 musical keys (there are musically distinct 12 scale notes, and each may use major or minor tonality). The 12 distinct scale notes are:
A A#=Bb B C C#=Db D D#=Eb E F F#=Gb G G#=Ab Five of the notes have two alternate names, as is indicated above with equals sign. Thus, there are 17 possible names of scale notes, but only 12 musically distinct notes. When using one of these as the keynote for a musical key, we can further distinguish between major and minor tonalities. This gives 34 possible keys, of which 24 are musically distinct.In naming his preludes, Mr. B used all the keys except the following 10, which were named instead by their alternate names:Ab minor A# major A# minor C# major Db minor D# major D# minor Gb major Gb minor G# major Write a program that, given the name of a key, give an alternate name if it has one, or report the key name is unique.
- 输入
- Each test case is described by one line having the format "note tonality", where "note" is one of the 17 names for the scale notes given above, and "tonality" is either "major" or "minor" (quotes for clarify).
- 输出
- For each case output the required answer, following the format of the sample.
- 样例输入
-
Ab minor
D# major
G minor - 样例输出
-
Case 1: G# minor
Case 2: Eb major
Case 3: UNIQUE
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main()
{
int flag,core=;
char a[];
while(gets(a))
{ flag=;
core++;
if(a[]=='A'&&a[]=='#')
{
a[]='B';
a[]='b';
}
else if(a[]=='B'&&a[]=='b')
{
a[]='A';
a[]='#';
}
else if (a[]=='C'&&a[]=='#')
{
a[]='D';
a[]='b'; }
else if(a[]=='D'&&a[]=='b')
{
a[]='C';
a[]='#';
}
else if(a[]=='D'&&a[]=='#')
{
a[]='E';
a[]='b';
}
else if(a[]=='E'&&a[]=='b')
{
a[]='D';
a[]='#';
}
else if(a[]=='F'&&a[]=='#')
{
a[]='G';
a[]='b';
}
else if(a[]=='G'&&a[]=='b')
{
a[]='F';
a[]='#';
}
else if(a[]=='G'&&a[]=='#')
{
a[]='A';
a[]='b';
}
else if(a[]=='A'&&a[]=='b')
{
a[]='G';
a[]='#';
}
else {
flag=;
}
if(flag==)
{
cout<<"Case "<<core<<": "<<a<<endl; }
else{
cout<<"Case "<<core<<": "<<"UNIQUE"<<endl;} }
}
就是一个字符串的替换问题,gets()可以收入空格,用java的话也一样只不过这里用到
ch = str.toCharArray();将字符串转化成字母存放到数组里面,然后比较前两位就可以
还有一种取字符串的方法在这里并不是很实用,就是 ch = str.charAt(0);ch = str.charAt(1);
---------------------------------------------------------------------------------------------------
蛇形填数
- 描述
- 在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
- 输入
- 直接输入方陈的维数,即n的值。(n<=100)
- 输出
- 输出结果是蛇形方陈。
- 样例输入
-
3
- 样例输出
-
7 8 1
6 9 2
5 4 3#include<iostream>
#include<string>
#include<cstdio>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int a[][]; int n;
cin>>n;
int x=,y=n-;
memset(a,,sizeof(a));
a[][n-]=;
int val = ;
while(val<n*n)
{
while(x+<n&&a[x+][y]==) a[++x][y]=++val; while(y->=&&a[x][y-]==) a[x][--y]=++val; while(x->=&&a[x-][y]==) a[--x][y]=++val; while(y+<n&&a[x][y+]==) a[x][++y]=++val;
}
for(x=;x<n;x++)
{ for(y=;y<n;y++)
{
cout<<a[x][y];
}
cout<<endl;
} }这个蛇形填数非常容易错,多看看理解理解,为什么val<n*n那里有必要多想想,还有为什么++x或者++y也要注意
package day05; import java.util.Scanner; public class Main { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int [][]a = new int[101][101];
int x=0;
int y=n-1;
int val=1;
a[0][n-1]=1;
while(val<n*n)
{
while(x+1<n&&a[x+1][y]==0) a[++x][y]=++val;
while(y-1>=0&&a[x][y-1]==0) a[x][--y]=++val;
while(x-1>=0&&a[x-1][y]==0) a[--x][y]=++val;
while(y+1<n&&a[x][y+1]==0) a[x][++y]=++val; }
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
System.out.print(a[x][y]);
System.out.println();
} }
}
但是如果要变成while((x+<n)&&a[++x][y]==) a[++x][y]=++num;
while((y->=)&&a[x][--y]==) a[x][--y]=++num;
while((x->=)&&a[--x][y]==)a[--x][y]=++num;
while((y+<n)&&a[x][++y]==) a[x][++y]=++num;结果就会不一样,why········关于++的使用以及+1的使用一定要注意
-------------------------------------------------------------------------------------------------------------------------------------------------------
韩信点兵
时间限制: ms | 内存限制: KB
难度:
描述
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<,b<,c<),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。
输入
输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<,b<,c<)。例如,输入:
输出
输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:
样例输入 样例输出#include<iostream>
#include<cstring>
#include<cmath>
#include<math.h> #include<stdio.h>
using namespace std;
int main()
{
double a,b,c;
double i;
cin>>a>>b>>c;
for(i=;i<=;i++)
{
if(fmod(i,3.0)==a&&fmod(i,5.0)==b&&fmod(i,7.0)==c)
cout<<i;
if(i>)
cout<<"No answer"; } }math.h
数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有:1、 三角函数double sin(double);正弦double cos(double);余弦double tan(double);正切2 、反三角函数double asin (double); 结果介于[-PI/2,PI/2]double acos (double); 结果介于[0,PI]double atan (double); 反正切(主值),结果介于[-PI/2,PI/2]double atan2 (double,double); 反正切(整圆值),结果介于[-PI,PI]3 、双曲三角函数double sinh (double);double cosh (double);double tanh (double);4 、指数与对数double frexp(double value,int *exp);这是一个将value值拆分成小数部分f和(以2为底的)指数部分exp,并返回小数部分f,即f*2^exp。其中f取值在0.5~1.0范围或者0。double ldexp(double x,int exp);这个函数刚好跟上面那个frexp函数功能相反,它的返回值是x*2^expdouble modf(double value,double *iptr);拆分value值,返回它的小数部分,iptr指向整数部分。double log (double); 以e为底的对数double log10 (double);以10为底的对数double pow(double x,double y);计算x的y次幂float powf(float x,float y); 功能与pow一致,只是输入与输出皆为浮点数double exp (double);求取自然数e的幂double sqrt (double);开平方5 、取整double ceil (double); 取上整,返回不比x小的最小整数double floor (double); 取下整,返回不比x大的最大整数,即高斯函数[x]6 、绝对值int abs(int i); 求整型的绝对值double fabs (double);求实型的绝对值double cabs(struct complex znum);求复数的绝对值7 、标准化浮点数double frexp (double f,int *p); 标准化浮点数,f = x * 2^p,已知f求x,p (x介于[0.5,1])double ldexp (double x,int p); 与frexp相反,已知x,p求f8 、取整与取余double modf (double,double*); 将参数的整数部分通过指针回传,返回小数部分double fmod (double,double); 返回两参数相除的余数9 、其他double hypot(double x,double y);已知直角三角形两个直角边长度,求斜边长度double ldexp(double x,int exponent);计算x*(2的exponent次幂)double poly(double x,int degree,double coeffs []);计算多项式int matherr(struct exception *e);数学错误计算处理程序source: 《C & C++ Code Capsules》
南阳oj水题集合,语言的灵活运用的更多相关文章
- Codeforces水题集合[14/未完待续]
Codeforces Round #371 (Div. 2) A. Meeting of Old Friends |B. Filya and Homework A. Meeting of Old Fr ...
- 华为 oj 水题 数字颠倒
练手,献给初学者 #include <stdio.h> #include <string.h> int main(void) { char string[200]={'\0'} ...
- 【南阳OJ分类之语言入门】80题题目+AC代码汇总
小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...
- Leetcode OJ 刷题
Valid Palindrome吐槽一下Leetcode上各种不定义标准的输入输出(只是面试时起码能够问一下输入输出格式...),此篇文章不是详细的题解,是自己刷LeetCode的一个笔记吧,尽管没有 ...
- gdutcode 1195: 相信我这是水题 GDUT中有个风云人物pigofzhou,是冰点奇迹队的主代码手,
1195: 相信我这是水题 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 821 Solved: 219 Description GDUT中有个风云人 ...
- ACM水题
ACM小白...非常费劲儿的学习中,我觉得目前我能做出来的都可以划分在水题的范围中...不断做,不断总结,随时更新 POJ: 1004 Financial Management 求平均值 杭电OJ: ...
- sdut 2413:n a^o7 !(第三届山东省省赛原题,水题,字符串处理)
n a^o7 ! Time Limit: 1000MS Memory limit: 65536K 题目描述 All brave and intelligent fighters, next you w ...
- sdut 2163:Identifiers(第二届山东省省赛原题,水题)
Identifiers Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Identifier is an important c ...
- Codeforces Round #367 (Div. 2)---水题 | dp | 01字典树
A.Beru-taxi 水题:有一个人站在(sx,sy)的位置,有n辆出租车,正向这个人匀速赶来,每个出租车的位置是(xi, yi) 速度是 Vi;求人最少需要等的时间: 单间循环即可: #inclu ...
随机推荐
- 如何利用hibernate3解决数据库丢失更新问题?
首先我们要明白什么叫丢失更新. 比如数据库有一个person表,里面有一条这样的数据 "5 zhangsan shenzhen"; 现在有两个事务A.B同时查找了这一条记录: A事 ...
- 图像处理之canny---求梯度
梯度求法和sobel之类的算子雷同,甚至更简单,就是一个离散差分,不清楚的童鞋可以百度,一大堆资料呢,从源码也可清晰的看出原理. // 方向导数,求梯度/* * @parameter sz: 图像大小 ...
- 【转】android 签名验证防止重打包
网上资料很多,这里只做一个笔记反编译 dex 修改重新打包签名后 apk 的签名信息肯定会改变,所以可以在代码中判断签名信息是否被改变过,如果签名不一致就退出程序,以防止 apk 被重新打包. 1 j ...
- Angular入门(二) 服务
目的:为了不再把相同的代码复制一遍又一遍,我们要创建一个单一的可复用的数据服务,并且把它注入到需要它的那些组件中. ※ 文件命名约定:服务名称的小写形式(基本名),加上.service后缀,如果服务 ...
- 操作符表示指针指向的底层值 切片 nill 清空 按值引用赋值 获取地址赋值
package main import "fmt" var thisVisitedUrls [] string func tf() { p := &thisVisitedU ...
- X86/X64处理器体系结构及寻址模式
由8086/8088.x86.Pentium发展到core系列短短40多年间,处理器的时钟频率差点儿已接近极限.尽管如此,自从86年Intel推出386至今除了添加一些有关流媒体的指令如mmx/sse ...
- JavaScript判断图片是否加载完成的三种方式 (转)
一.load事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!DOCTYPE HTML> <html> <head> ...
- SAP-财务会计
[转自 http://blog.itpub.net/195776/viewspace-1023913/] 一.FI组织架构1主数据1.1总帐科目1.2帐户组.1.3统驭科目1.4 总帐未清项管理2 凭 ...
- jquery .html(),.text(),.val()用法
.html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改表单元素的value值. 这三个方法功能上的对比 .html(),.text() ...
- (转)nginx-rtmp-module和ffmpeg搭建实时HLS切片
1.rtmp服务器 nginx+pcre+zlib+openssl+nginx-rtmp-module ./configure \ --prefix=/usr/local/nginx \ --sbin ...