藍橋杯—FJ的字符串 、Sine之舞 、完美的代價

基礎練習 FJ的字符串  

時間限制:1.0s   內存限制:512.0MB

      

問題描述

  FJ在沙盤上寫了這樣一些字符串:
  A1 = “A”
  A2 = “ABA”
  A3 = “ABACABA”
  A4 = “ABACABADABACABA”
  … …
  你能找出其中的規律並寫所有的數列AN嗎?

輸入格式

  僅有一個數:N ≤ 26。

輸出格式

  請輸出相應的字符串AN,以一個換行符結束。輸出中不得含有多餘的空格或換行、回車符。

樣例輸入

3

樣例輸出

ABACABA

import java.util.Scanner;

public class Main{

public static void main(String[] args)

{

Scanner sc=new Scanner(System.in);

int n=sc.nextInt();

print(n);

}

public static void print(int n)

{   

if(n==1)

System.out.print("A");

else if(n<=26)

{

print(n-1);

System.out.print((char)(64+n));

print(n-1);

}

}

}



       

 

基礎練習 Sine之舞  

時間限制:1.0s   內存限制:512.0MB      

問題描述

  最近FJ爲他的奶牛們開設了數學分析課,FJ知道若要學好這門課,必須有一個好的三角函數基本功。所以他準備和奶牛們做一個“Sine之舞”的遊戲,寓教於樂,提高奶牛們的計算能力。
  不妨設
  An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)
  Sn=(...(A1+n)A2+n-1)A3+...+2)An+1
  FJ想讓奶牛們計算Sn的值,請你幫助FJ打印出Sn的完整表達式,以方便奶牛們做題。

輸入格式

  僅有一個數:N<201。

輸出格式

  請輸出相應的表達式Sn,以一個換行符結束。輸出中不得含有多餘的空格或換行、回車符。

樣例輸入

3

樣例輸出

((sin(1)+3)sin(1–sin(2))+2)sin(1–sin(2+sin(3)))+1

import java.util.Scanner;
public class Main{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String s=S(n,1,1);
System.out.println(s);
}

public static String S(int n,int i,int j)
{
if(i==n) return A(n,i,j)+"+"+i;
return "("+S(n,i+i,j)+")"+A(n,i,j)+i;
}

public static String A(int n,int i,int j)
{
if(i==n) return "sin("+j+")";
if(i%2==0) return "sin("+i+"-"+A(n,i+1,j+1)+")";
else return "sin("+i+"+"+A(n,i+1,j+1)+")";
}

}

 

基礎練習 完美的代價  

時間限制:1.0s   內存限制:512.0MB    

問題描述

  迴文串,是一種特殊的字符串,它從左往右讀和從右往左讀是一樣的。小龍龍認爲迴文串纔是完美的。現在給你一個串,它不一定是迴文的,請你計算最少的交換次數使得該串變成一個完美的迴文串。
  交換的定義是:交換兩個相鄰的字符
  例如mamad
  第一次交換 ad : mamda
  第二次交換 md : madma
  第三次交換 ma : madam (迴文!完美!)

輸入格式

  第一行是一個整數N,表示接下來的字符串的長度(N <= 8000)
  第二行是一個字符串,長度爲N.只包含小寫字母

輸出格式

  如果可能,輸出最少的交換次數。
  否則輸出Impossible

樣例輸入

5
mamad

樣例輸出

3

import java.util.Scanner;
public class Main
{
  public static void main(String args[])
  {
 Scanner sc=new Scanner(System.in);
 int n=sc.nextInt();
 String s=sc.next();
 char a[]=s.toCharArray();
 int b[]=new int[26];
 int j;int k=0;
 char x='0';
 for(int i=0;i<n;i++)
 {
 j=a[i]-'a';
 b[j]++;
 }
 
 for(int i=0;i<26;i++)
 {
 if(b[i]%2!=0)
 {
  k++;
  x=(char)(i+'a');
 }
 }
 
 if(k>=2)
  System.out.println("Impossible");
 else 
System.out.println(changes(a,x,n)); 
  }
  
      public static long changes(char s[],char x,int n)
      {
     int i,j,k, change=0;
     for(i=0;i<n/2;i++)
     {
     if(s[i]==x)
     {
     for(j=i;j<n-i-1;j++)
       if(s[n-i-1]==s[j]) break;
     change=change+j-i;
     for(k=j;k>i;k--)
     s[k]=s[k-1];
     s[i]=s[n-i-1];
     }else
       {
     for(j=n-i-1;j>=i;j--)
     if(s[i]==s[j]) break;
     change=change+n-i-1-j;
     for(k=j;k<n-i-1;k++)
     s[k]=s[k+1];
     s[n-i-1]=s[i];
       }
     }
     return change;
      }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章