1、10000以内的完数
#include <stdio.h>
int main(int argc, char* argv[])
{
int i,j,s,sum;
sum=0;
for(i=2;i<=1000;i++)
{
s=0;
for(j=1;j<i;j++)
{
if(i%j==0) //这一块是如果能够整除,那么就是该数的因子,我们累加起来
{
s+=j;
}
}
if(s==i) //因子的和与原数比较,如果正确就输出
{
printf("%d\n",i);
sum++;
}
}
printf("完数的个数:%d\n",sum);
return 0;
}
---------------------
2、求三位数对称素数
/*
* 问题描述:找出3位数对称素数
* 如101就是,787也是,896不是
* 是的话输入YES,否则输出NO
* xtfggef 2012/5/16
*/
#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(int);
int main(int argc, char * argv[])
{
int n;
cin >> n;
//核心
cout << (n>100&&n<1000&&n/100==n%10&&isPrime(n)?"YES\n":"NO\n");
return 0;
}
/*
* 判断是否是素数
*/
bool isPrime(int n)
{
int sqr = sqrt(n*1.0);
for(int i=2; i<=sqr; i++)
{
if(n%i==0)
return false;
}
return true;
}
3、求两个数的最大公约数
#include <stdio.h>
int a, b, temp;
//辗转相除法实现
int Division(){
printf("请输入两个数(a,b):\n");
scanf("%d,%d",&a,&b);
if(a < b){
temp = a;
a = b;
b = temp;
}
while(a%b != 0){
temp = a%b;
a = b;
b = temp;
}
printf("最大公约数为:%d\n",b);
return 0;
}
//相减法实现
int Subtract(){
printf("请输入两个数(a,b):\n");
scanf("%d,%d",&a,&b);
if(a < b){
temp = a;
a = b;
b = temp;
}
while(a-b != 0){
temp = a-b;
a = b;
b = temp;
}
printf("最大公约数为:%d\n",b);
return 0;
}
//穷举法实现
int Exhaus() {
printf("请输入两个数(a,b):\n");
scanf("%d,%d",&a,&b);
if(a < b) {
temp = a;
a = b;
b = temp;
}
for(temp = b; a%temp || b%temp; temp--);
printf("最大公约数为:%d\n",temp);
return 0;
}
最小公倍数类似,借助于最小公倍数=X*Y/gcd(X,Y);就OK了。
此处注意:为了使计算不超出范围,最好写成:X/gcd(X,Y)*Y
猴子选大王问题:
public class Test02 {
//猴子选大王问题
public static void main(String[] args) {
//用数组表示淘汰的状态
boolean[] b=new boolean [15];
//初始化数组 true表示没淘汰
for(int i=0;i<b.length;i++){
b[i]=true;
}
//实现那些操作,猴子的剩余数量
int monkey=15;
//报数
int num=0;
//控制数组元素往后走,数组下标
int index=0;
//循环报数
while(monkey>1){
//位淘汰才能报数
if(b[index]){
///报数
num++;
//num==7淘汰
if(num==7){
b[index]=false;
monkey--;
num=0;
}
}
//被淘汰 ---移到下一个元素
index++;
//控制一圈的状态
if(index==15){
index=0;
}
}
for(int i=0;i<b.length;i++){
if(b[i]){
System.out.println(i+1);
}
}
}
}
螺旋填数问题:
public class Test03 {
public static void main(String[] args) {
// 螺旋填数,数组
int [][]arr=new int[4][5];
//定义行和列的变量
int row=0;//表示坐标问题
int col=0;
//
arr[row][col]=1;
//控制方向 向右,向下,向左,向上
int[][] direction={{0,1},{1,0},{0,-1},{-1,0}};
//二维数组的下标,---控制转向
int directionindex=0;
//循环赋值
for(int i=2;i<=20;i++){
//得到新的坐标的值
row=row+direction[directionindex][0];
col=col+direction[directionindex][1];
///判断是否越界
if((row>=4||row<0)||(col>=5||col<0)||(arr[row][col]!=0)){
//变为上一次的坐标
row=row-direction[directionindex][0];
col=col-direction[directionindex][1];
directionindex++;
//控制方向循环
if(directionindex==4){
directionindex=0;
}
//得到新的坐标
row=row+direction[directionindex][0];
col=col+direction[directionindex][1];
}
//给值
arr[row][col]=i;
}
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
Java实现矩阵的转置:
public class Matrix {
public static void main(String[] args) {
int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int array2[][] = new int[3][3];
System.out.println("转置前:");
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
array2[j][i] = array[i][j];
}
System.out.println();
}
System.out.println("转置后:");
for (int k = 0; k < array2.length; k++) {
for (int h = 0; h < array2[k].length; h++) {
System.out.print(array2[k][h] + " ");
}
System.out.println();
}
}
}
Java实现计算时间差
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Tiemp {
public static void main(String args[]){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String s1 = "20080808";
String s2 = "20080908";
try {
Date d1 = sdf.parse(s1);
Date d2 = sdf.parse(s2);
System.out.println((d2.getTime() - d1.getTime())/(3600L*1000));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
判断字符串是否为空:
#include <stdio.h>
#include <stdlib.h>
/*判断用户输入的字符串是否为回文
*回文是指顺读和反读都一样的串
*例:abccba为回文,abcdab不是回文
*/
int Palindrome(const char *str)
{
int length = strlen(str);
for(int i = 0; i <= length/2; i++)
{
if(str[i] != str[length-i-1])
{
return -1;
}
}
return 1;
}
int main()
{
char s[100];
gets(s);
int result = Palindrome(s);
if(result == 1)
{
printf("字符串是回文");
}
else
{
printf("字符串不是回文");
}
}
字符串转换为整数:
#include<iostream>
#include<string>
#include<assert.h>
using namespace std;
int str_2_int(string str)
{
assert(str.size()>0);
int pos = 0;
int sym = 1;
if(str[pos] == '+')
pos++;
else if(str[pos] == '-')
{
pos++;
sym=-1;
}
int num =0;
while(pos<str.length())
{
assert(str[pos]>='0');
assert(str[pos]<='9');
num = num*10+(str[pos]-'0');
assert(num>=0);
pos++;
}
num*=sym;
return num;
}
int main()
{
string str = "-1024";
int num = str_2_int(str);
cout << num << endl;
return 0;