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
数据规模与约定
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
数据规模与约定

对于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个糖果,从而变成偶数。

  反复进行这个游戏,直到所有小朋友的糖果数都相同为止。

  你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
  程序首先读入一个整数N(2<N<100),表示小朋友的人数。
  接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
  要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
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);
        }
    }
}

 

 
 
 
 
posted on 2016-01-15 18:05  cleverbiger  阅读(171)  评论(0)    收藏  举报