1、
基础练习 字母图形
时间限制:1.0s 内存限制:256.0MB
问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
BABCDEF
CBABCDE
DCBABCD
EDCBABC
数据规模与约定
1 <= n, m <= 26。
看了锦囊, 与坐标绝对值相关 ;
#include <cmath> #include <cstdio> int main() { int n, m; scanf("%d%d", &n, &m); for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int a=i-j; if(a<0) a*=-1; printf("%c", 'A'+a); } printf("\n"); } return 0; }
2、算法训练 最短路
时间限制:1.0s 内存限制:256.0MB
问题描述
给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。
输入格式
第一行两个整数n, m。
接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边。
输出格式
共n-1行,第i行表示1号点到i+1号点的最短路。
样例输入
3 3
1 2 -1
2 3 -1
3 1 2
1 2 -1
2 3 -1
3 1 2
样例输出
-1
-2
-2
数据规模与约定
对于10%的数据,n = 2,m = 2。
对于30%的数据,n <= 5,m <= 10。
对于100%的数据,1 <= n <= 20000,1 <= m <= 200000,-10000 <= l <= 10000,保证从任意顶点都能到达其他所有顶点。
#include <queue> #include <cstdio> #include <cstring> using namespace std; int n, m, cnt; const int N = 20001; const int M = 200001; const int INF = 0x3f3f3f3f; int dis[N], vis[N], head[N], D[N]; struct Edge { int from, to, val, next; }e[M]; void AddEdge(int u, int v, int w) { Edge E = {u, v, w, head[u]}; e[cnt] = E; head[u]=cnt++; } void spfa(int src) { memset(vis, 0, sizeof(vis)); for(int i = 1; i <= n; i++) dis[i]=INF; dis[src]=0; vis[src]=1; queue<int> Q; Q.push(src); D[src]++; while(!Q.empty()) { int u = Q.front(); Q.pop(); vis[u] = 0; for(int i = head[u]; i != -1; i = e[i].next) { int v = e[i].to; if(dis[v]>dis[u]+e[i].val) { dis[v]=dis[u]+e[i].val; if(!vis[v]) { vis[v]=1; Q.push(v); if(++D[v]>n) //判环; return; } } } } } int main() { scanf("%d%d", &n, &m); cnt = 0; memset(head, -1, sizeof(head)); memset(D, 0, sizeof(D)); for(int i = 0; i < m; i++) { int a, b, c; scanf("%d%d%d", &a, &b, &c); AddEdge(a, b, c); } spfa(1); for(int i = 2; i <= n; i++) printf("%d\n", dis[i]); printf("\n"); return 0; }
3、历届试题 分糖果
时间限制:1.0s 内存限制:256.0MB
问题描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
程序首先读入一个整数N(2<N<100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
2 2 4
2 2 4
样例输出
4
#include <cstdio> int main() { int n; int num[101]; scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", &num[i]); int cnt=0; bool flag=false; while(1) {
int i; if(flag) break; for(i = 1; i < n; i++) if(num[i] != num[i-1]) break;
if(i==n) flag=true;
int Q=num[n-1]/2; for(int i = n-1; i >= 1; i--) { num[i]/=2; num[i]+=num[i-1]/2; if(num[i]&1) { num[i]+=1; cnt++; } } num[0]/=2; num[0]+=Q; if(num[0]&1) { num[0]+=1; cnt++; } } printf("%d\n", cnt); return 0; }
4、
Java 大整数包含函数:
public static void main(String[] args) { // TODO Auto-generated method stub BigInteger aa =new BigInteger("100"); BigInteger bb= new BigInteger("25"); BigInteger sub=aa.subtract(bb);//大整数的减 BigInteger add=aa.add(bb);//大整数的加 BigInteger mul=aa.multiply(bb);//大整数的乘 BigInteger div=aa.divide(bb);//大整数的除 System.out.println(sub.toString()); System.out.println(add.toString()); System.out.println(mul.toString()); System.out.println(div.toString()); }
JAVA 大数版 高斯公式;
import java.math.*; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); while(cin.hasNext()) { BigInteger n = cin.nextBigInteger(); BigInteger m = new BigInteger("1"); BigInteger q = n.add(m); BigInteger p = q.multiply(n); BigInteger o = new BigInteger("2"); BigInteger r = p.divide(o); System.out.println(r); } } }
5、 java浮点数 四舍五入
求圆面积(给定直径), 结果保留7位;
import java.math.*; import java.util.Scanner; import java.text.DecimalFormat; class Main { public static final double PI = Math.acos(-1.0); public static void main(String[] args) { Scanner cin=new Scanner(System.in); while(cin.hasNext()) { double n=cin.nextDouble(); double m=PI*n*n; //m=(double)(Math.round(m*10000000))/10000000; 好像会损失精度, 不可靠。 DecimalFormat b = new DecimalFormat("##0.0000000"); String aa=b.format(m); System.out.println(aa); } } }
浙公网安备 33010602011771号