三角形面积
答案:28
可以看到三角形所外接的是一个8*8的正方形,把正方形内除目标三角形外的其他三角形面积求出 。(很好求,都是直角三角形)==>(4*6+2*8+4*8)/2=36
所以答案就是:64-36=28
public class Main{
public static void main(String[] args){
System.out.println(64-36);
}
}
立方变自身
答案:6
需要注意的是:X立方按位累加和一般不会很大,可以用电脑上的计算器试一下,比如99,结果是970299,各位累加结果不符合题意。
代码如下:
public class Main {
private static int ans;
public static void main(String[] args) {
for (int i=1;i<99;i++){
int i1=i*i*i;
int sum=sum(i1);
if (sum==i) {
System.out.println(i+" "+i1);
ans++;
}
}
System.out.println(ans);
}
private static int sum(int x){
String s=String.valueOf(x);
int sum=0;
for (int i=0;i<s.length();i++){
sum+=s.charAt(i)-'0';
}
return sum;
}
}
三羊献瑞
答案:1085
这题可以转换成一个:
a b c d
+ e f g b
--------------------------------
e f c b i
根据加法进位,e=1,这是确定的,又因为进位,如果a=9,则f=0,且c+g一定得进一位,即c=b+1,c+g>10。所以我们只需要枚举b,d,g,i。并且范围应该是[2,8],且不能与其他重复。
public class Main {
public static void main(String[] args) {
for(int b=2;b<9;b++) {
for(int d=2;d<9;d++) {
if(b==d) continue;
for(int g=2;g<9;g++) {
if(g==b || g==d)continue;
int c=b+1;
if(c==b || c==d ||c==g)continue;
if(c+g<10)continue;
int sum=9000+b*100+c*10+d+1000+g*10+b;
for(int i=2;i<9;i++) {
if(i==b || i==d || i==g || i==c)continue;
if(sum<=(10000+c*100+b*10+i)&&sum>=(10000+c*100+b*10+i)) {
System.out.printf("%2d%d%d%d\n",9,b,c,d);
System.out.printf("%2d%d%d%d\n",1,0,g,b);
System.out.printf("%d\n",sum);
System.out.printf("---------\n");
}
}
}
}
}
}
}
循环节长度
答案: return v.size() -v.indexOf(n);
九数组分数
答案:{int t=x[k]; x[k]=x[i]; x[i]=t;}
加法变乘法
答案:16
其实,我们可以遍历*的位置,第一个*考虑最极限的位置应该是46,因为它得给第二个*留位置。
并且,更换符号后,其实除了i+(i+1)和j+(j+1)有变化其他部分都没变。
所以可以看作最终结果的差值其实就等于[i*(i+1)+j*(j+1)]和[i+(i+1)+j+(j+1)]的差值。
public class Main {
public static void main(String[] args) {
for(int i=1;i<=46;i++) {//第一个*位置
for(int j=i+2;j<=48;j++) {//第二个*位置
if(i*(i+1)-(i+i+1)+j*(j+1)-(j+j+1)==2015-1225) {
System.out.println(i+" "+j);
}
}
}
}
}
牌型种数
答案:3598180
public class Main{
private static int ans;
public static void main(String[] args) {
f(0,0);
System.out.print(ans);
}
private static void f(int k,int cnt) {
if(k>13||cnt>13)return;
if(k == 13 && cnt ==13) {
ans++;
return;
}
for(int i=0;i<5;i++) {
f(k+1,cnt+i);
}
}
}
饮料换购
其实每三个瓶盖换换一瓶=> 每三瓶n-2
最终他喝到的:每进行一次n-2,就加3。直到最后不够三瓶盖了,再加上剩余的,所得结果即所求
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int ans=0;
while(n>=3) {
n-=2;
ans+=3;
}
ans+=n;
System.out.print(ans);
}
}