2.
从键盘获取一个年份
,
判断其是否为闰年
闰年判断方法
:
能被
4
正常且不能被
100
整除
,
或者能被
400
整除就是闰年
,
否则不是闰年
int
main
()
{
int
a
=
10
;
int
year
;
scanf
(
"%d"
,
&
year
);
if
((
year
%
4
==
0
&&
year
%
100
!=
0
)
||
year
%
400
==
0
)
printf
(
"%d
是闰年
\n"
,
year
);
else
printf
(
"%d
不是闰年
\n"
,
year
);
return
0
;
}
输出
2000
到
2500
的闰年
int
main
()
{
for
(
int
i
=
2000
;
i
<=
2500
;
++
i
)
{
if
(
i
%
4
==
0
&&
i
%
100
!=
0
||
i
%
400
==
0
)
printf
(
"%d\n"
,
i
);
}
return
0
;
}
3.
求
1+2+3+...+n
的和
//1+2+3+4+...+n
int
main
()
{
int
n
;
scanf
(
"%d"
,
&
n
);
int
sum
=
0
;
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
sum
+=
i
;
//sum = sum + i;
}
printf
(
"
和
=%d\n"
,
sum
);
printf
(
"
利用求和公式
:%d\n"
,(
1
+
n
)
*
n
/
2
);
//
除了利用上面的循环求解
,
还可以使用求和公式
return
0
;
}
1.
从键盘获取三个整数
,
从大到小输出这
3
个数字
.
int
main
()
{
printf
(
"%d,%d,%d,%d\n"
,
7
%
3
,
-
7
%
3
,
7
%-
3
,
-
7
%-
3
);
//1,-1,1,-1
//7/3= 2 ... 1
平常用
//-7/3=-2 ... -1
考试
//7/-3=-2 ... 1
考试
//-7/-3=2...-1
考试
return
0
;
}
int
main
()
{
int
a
,
b
,
c
;
int
tmp
=
0
;
//scanf("%d,%d,%d\n",&a,&b,&c);//
不要使用这种方式
//int len =scanf("%d%d%d",&a,&b,&c);//
提示
,
接收返回值
//(void)scanf("%d%d%d", &a, &b, &c);//
显示说明丢弃返回值
scanf
(
"%d%d%d"
,
&
a
,
&
b
,
&
c
);
//printf("%d,%d,%d\n",a,b,c);
//printf("len=%d\n",len);
if
(
a
<
b
)
//
交换
{
tmp
=
a
;
a
=
b
;
b
=
tmp
;
}
//a >= b
if
(
a
<
c
)
{
tmp
=
a
;
a
=
c
;
c
=
tmp
;
}
//a>=c
if
(
b
<
c
)
{
tmp
=
b
;
b
=
c
;
c
=
tmp
;
}
printf
(
"%d,%d,%d\n"
,
a
,
b
,
c
);
return
0
;
}
2.1+2+3+4+...+100
int
main
()
{
printf
(
"%d\n"
,(
1
+
100
)
*
100
/
2
);
return
0
;
}
3.
判断一个数
n
能否同时被
3
和
5
整除
int
main
()
{
int
n
;
scanf
(
"%d"
,
&
n
);
if
(
n
%
3
==
0
&&
n
%
5
==
0
)
printf
(
"%d
能整除
3
和
5\n"
,
n
);
else
printf
(
"%d
不能整除
3
和
5\n"
,
n
);
return
0
;
}
4.
输出
100~200
之间的素数
int
main
()
{
int
j
;
for
(
int
i
=
100
;
i
<
200
;
i
++
)
{
//
判断
i
是否为素数
//for (j = 2; j < i; j++)
//{
// if (i % j == 0)//
不是素数
// break;//
跳出一层循环
//}
//if (j == i)
// printf("%d
是素数
\n",i);
//
优化
,
只需要遍历到
n^1/2
for
(
j
=
2
;
j
<=
sqrt
(
i
);
j
++
)
{
if
(
i
%
j
==
0
)
break
;
}
if
(
j
>
sqrt
(
i
))
printf
(
"%d
是个素数
\n"
,
i
);
}
return
0
;
}
1.
假如我国国民生产总值的年增长率为
7% ,
计算
10
年后我国国民生产总值与现在相比增长多少百分比 。
计算公式为
p = (l + r )^n.
其中
r
为年增长率,
n
为年数,
p
为与现在相比的倍数 。
pow
函数
,
计算
x
的
y
次方
,
需要引入
math.h
文件
2.
存款利息的计算
有
10000
元,想存
5
年,可按以下
5
种办法存 :
(1)
一次存
5
年期。
(2)
先存
2
年期,到期后将本息再存
3
年期。
(3)
先存
3
年期,到期后将本息再存
2
年期 。
(4)
存
1
年期,到期后将本息再存
1
年期,连续存
5
次 。
(5)
存活期存款。活期利息每一季度结算一次 。
2017
年的银行存款利息如下 :
1
年期定期存款利息为
1.5%;
int
main
()
{
double
p
=
1
;
for
(
int
i
=
0
;
i
<
10
;
i
++
)
//1.
利用循环计算
(l + r )^n
p
=
p
*
(
1
+
0.07
);
printf
(
"%f\n"
,
p
);
//printf("%f\n",pow(1+0.07,10));//2.
利用
pow
函数计算
(l + r )^n
return
0
;
}
2
年期定期存款利息为
2.1%;
3
年期定期存款利息为
2.75%;
5
年期定期存款利息为
3%;
活期存款利息为
0.35%(
活期存款每一季度结算一次利息) 。
如果
r
为年利率,
n
为存款年数,则计算本息和的公式如下:
1
年期本息和:
P =10000 * (1 + r ) ;
n
年期本息和:
P = 10000 * (1 + n * r);
存
n
次
1
年期的本息和 :
P = 10000 * (1 +r)^n ;
活期存款本息和 :
P = 10000* (1 + r/4)^4n;
.说明:
10000* (1 + r/4 )
是一个季度的本息和 。
int
main
()
{
double
m
=
10000
;
double
tmp
;
printf
(
"5
年本息和
:%f\n"
,
m
*
(
1
+
5
*
0.03
));
tmp
=
m
*
(
1
+
2
*
0.021
);
tmp
=
tmp
*
(
1
+
3
*
0.0275
);
printf
(
"2+3
年本息和
:%f"
,
tmp
);
//2+3
年和
3+2
年结果相同
tmp
=
m
;
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
tmp
=
tmp
*
(
1
+
0.015
);
}
printf
(
"1+1+...+1
年本息和
:%f\n"
,
tmp
);
printf
(
"
活期本息和
:%f\n"
,
m
*
pow
((
1
+
0.0035
/
4
),
4
*
5
));
return
0
;
}
3.
文字加密
从键盘读取
5
个字母
,
并把这
5
个字母加密
,
然后输出
.
加密规则是
:
用原来的字母后面第
4
个字母代替原来的
字母。例如
,
字母
"A"
后面第
4
个字母是
"E";
字母
"b"
后面第
4
个字母是
"f",
但是需要注意字母
"Z"
后面第
4
个字
母是
"D";
字母
"x"
后面第
4
个字母是
"b".
例如
,
从键盘读取的是
'Y','e','l','l','o'
加密后输出
'C','i','p','p','s'
int
main
()
{
char
a
;
for
(
int
i
=
0
;
i
<
5
;
i
++
)
//
从键盘获取
5
次字符
{
scanf
(
"%c"
,
&
a
);
//printf("%c",a+4);
if
(
'a'
<=
a
&&
a
<=
'v'
||
'A'
<=
a
&&
a
<=
'V'
)
printf
(
"%c"
,
a
+
4
);
else if
(
'v'
<
a
&&
a
<=
'z'
||
'V'
<
a
&&
a
<
'Z'
)
//
最后
4
个字符特殊处理
printf
(
"%c"
,
a
-
22
);
}
return
0
;
}
4.
从键盘获取两个整数
,
求这两个数的最大公约数
int
main
()
//
方法
1:
从头到尾依次遍历
,
最后的公约数就是最大公约数
{
//
也可以从后往前遍历
,
那第一个公约数就是最大公约数
int
m
;
int
n
;
scanf
(
"%d %d"
,
&
m
,
&
n
);
//10,15
int
tmp
=
1
;
//
保存公约数
for
(
int
i
=
1
;
i
<=
m
;
i
++
)
//
从头到尾遍历所有可能
{
if
(
m
%
i
==
0
&&
n
%
i
==
0
)
tmp
=
i
;
}
printf
(
"
最大公约数
=%d\n"
,
tmp
);
return
0
;
}
int
main
()
//
方法
2:
辗转相除法
,r
余数为
0,
则
n
就是最大公约数
{
int
m
;
int
n
;
scanf
(
"%d %d"
,
&
m
,
&
n
);
//10,15
int
r
;
//
余数
for
(
r
=
m
%
n
;
r
!=
0
; )
{
m
=
n
;
n
=
r
;
r
=
m
%
n
;
}
printf
(
"%d\n"
,
n
);
return
0
;
}
1.
从键盘获取两个整数
,
求这两个数的最小公倍数
int
main
()
{
int
m
,
n
;
scanf
(
"%d%d"
,
&
m
,
&
n
);
for
(
int
i
=
m
;
i
<=
m
*
n
;
i
++
)
{
if
(
i
%
m
==
0
&&
i
%
n
==
0
)
{
printf
(
"%d\n"
,
i
);
break
;
//
跳出一层循环
//return 0;//
结束这个函数
}
}
printf
(
"bye\n"
);
return
0
;
}
2.
设圆半径
r=1.5,
圆柱高
h=3,
求圆周长、圆面积、圆球表面积 、圆球体积、圆柱体积。输出计算结果,
输出时要求有文字说明
(
例如
:
圆周长
=3.00)
,取小数点后
2
位数字
略
3.
从键盘输入一个小于
1000
的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。
要求在输入数据后先对其进行检查是否为小于
1000
的正数。若不是,则要求重新输入
int
main
()
{
int
n
;
do
{
printf
(
"
请输入一个小于
1000
的正数
\n"
);
scanf
(
"%d"
,
&
n
);
}
while
(
n
<
0
||
n
>=
1000
);
printf
(
"%d\n"
,(
int
)
sqrt
(
n
));
return
0
;
}
输出乘法口诀表
.
如下图
int
main
()
{
for
(
int
i
=
1
;
i
<=
9
;
i
++
)
{
for
(
int
j
=
1
;
j
<=
i
;
j
++
)
{
printf
(
"%d*%d=%-2d "
,
j
,
i
,
i
*
j
);
//%-2d:
占两个字符
,
左对齐
}
printf
(
"\n"
);
}
return
0
;
}
1.
给一个不多于
5
位的正整数,要求 :
(1)
求出它是几位数;
(2)
分别输出每一位数字;
(3)
按逆序输出各位数字,例如原数为
321,
应输出
123
。
int
main
()
{
int
n
;
do
{
printf
(
"
请输入一个不多于
5
位的正整数
\n"
);
scanf
(
"%d"
,
&
n
);
}
while
(
0
>=
n
||
100000
<=
n
);
//
读取一个合理的数字
int
a
=
n
%
10
;
//
个位
int
b
=
(
n
/
10
)
%
10
;
//
十位
int
c
=
(
n
/
100
)
%
10
;
//
百位
int
d
=
(
n
/
1000
)
%
10
;
//
千位
int
e
=
n
/
10000
;
//
万位
if
(
n
<
10
)
{
printf
(
"1
位数字
\n"
);
printf
(
"
顺序输出
:%d\n"
,
a
);
printf
(
"
逆序输出
:%d\n"
,
a
);
}
else if
(
n
<
100
)
//45
{
printf
(
"2
位数字
\n"
);
printf
(
"
顺序输出
:%d,%d\n"
,
b
,
a
);
printf
(
"
逆序输出
:%d,%d\n"
,
a
,
b
);
}
else if
(
n
<
1000
)
//123
{
printf
(
"3
位数字
\n"
);
printf
(
"
顺序输出
:%d,%d,%d\n"
,
c
,
b
,
a
);
printf
(
"
逆序输出
:%d,%d,%d\n"
,
a
,
b
,
c
);
}
else if
(
n
<
10000
)
//1234
{
printf
(
"4
位数字
\n"
);
printf
(
"
顺序输出
:%d,%d,%d,%d\n"
,
d
,
c
,
b
,
a
);
printf
(
"
逆序输出
:%d,%d,%d,%d\n"
,
a
,
b
,
c
,
d
);
}
else
//12345
{
printf
(
"5
位数字
\n"
);
printf
(
"
顺序输出
:%d,%d,%d,%d,%d\n"
,
e
,
d
,
c
,
b
,
a
);
printf
(
"
逆序输出
:%d,%d,%d,%d,%d\n"
,
a
,
b
,
c
,
d
,
e
);
}
return
0
;}
2.
企业发放的奖金根据利润提成。利润
I
低于或等于
100000
元的,奖金可提成
10%;
利润高于
100000
元,低于
200000
元
(100000<I<=200000)
时,低于
100000
元的部分按
10%
提成,高于
100000
元的部
分,可提成
7.5%; 200000<I<=400000
时,低于
200000
元的部分仍按上述办法提成(下同)。高于
200000
元的部分按
5%
提成;
400000<I<=600000
元时,高于
400000
元的部分按
3%
提成;
600000<I<=1000000
时,高于
600000
元的部分按
1.5%
提成;
I>1000000
时,超过
1000000
元的部分按
1%
提成。从键盘输入当月利润
I,
求应发奖金总数。
int
main
()
{
double
I
;
//
利润
,
不建议使用
I
变量
,
容易和其它符号混淆
,I,l,1
double
m
;
//
奖金
printf
(
"
请输入利润
\n"
);
scanf
(
"%lf"
,
&
I
);
if
(
I
<=
100000
)
{
m
=
I
*
0.1
;
}
else if
(
I
<=
200000
)
{
m
=
100000
*
0.1
+
(
I
-
100000
)
*
0.075
;
}
else if
(
I
<=
400000
)
{
m
=
100000
*
0.1
+
(
200000
-
100000
)
*
0.075
+
(
I
-
200000
)
*
0.05
;
}
else if
(
I
<=
600000
)
{
m
=
10000
+
7500
+
10000
+
(
I
-
400000
)
*
0.03
;
}
else if
(
I
<=
1000000
)
{
m
=
10000
+
7500
+
10000
+
6000
+
(
I
-
600000
)
*
0.015
;
}
else
{
m
=
10000
+
7500
+
10000
+
6000
+
6000
+
(
I
-
1000000
)
*
0.01
;
}
printf
(
"
利润为
%.2f,
对应的奖金为
%.2f\n"
,
I
,
m
);
return
0
;
}
3.
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
int
main
()
{
int
alpha
=
0
;
//
英文字符
int
blank
=
0
;
//
空格
int
digit
=
0
;
//
数字
int
other
=
0
;
//
其它
int
ch
;
while
((
ch
=
getchar
())
!=
'\n'
)
//,
从键盘获取一行字符
,
非常重要
{
//if('a'<=ch&&ch<='z' || 'A'<=ch&&ch<='Z')//
英文字符
,
前提
:
字母连续
if
(
isalpha
(
ch
))
alpha
++
;
else if
(
ch
==
' '
)
blank
++
;
//else if('0'<=ch &&ch<='9')//
可以使用
else if
(
isdigit
(
ch
))
digit
++
;
else
other
++
;
}
printf
(
"%d,%d,%d,%d\n"
,
alpha
,
blank
,
digit
,
other
);
return
0
;
}
4.
一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,
6
的因子为
1,2,3
而
6=1+2+3,
因 此
6
是"完数"。编程序找出
1000
之内的所有完数
,
并输出。
int
main
()
{
int
sum
=
0
;
//
因子和
for
(
int
i
=
1
;
i
<
1000
;
i
++
)
{
sum
=
0
;
//
这个一定要在这赋值
for
(
int
j
=
1
;
j
<
i
;
j
++
)
//
遍历
i
的所有因子
{
if
(
i
%
j
==
0
)
sum
+=
j
;
}
if
(
sum
==
i
)
//
完数
{
//
下面是具体的输出方式
printf
(
"%d=1"
,
i
);
for
(
int
j
=
2
;
j
<
i
;
j
++
)
{
if
(
i
%
j
==
0
)
printf
(
"+%d"
,
j
);
}
printf
(
"\n"
);
}
}
return
0
;
}
5.
猴子吃桃问题。猴子第
1
天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第
2
天早上又
将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第
10
天早上
想再吃时,就只剩一个桃子了。求第
1
天共摘多少个桃子。
int
main
()
{
int
sum
=
1
;
for
(
int
i
=
9
;
i
>=
1
;
i
--
)
{
sum
=
(
sum
+
1
)
*
2
;
}
printf
(
"%d\n"
,
sum
);
return
0}
1.
给定一个整数
,
输出该整数是一个几位数字
,
数字可能是负数
,0
或者正数
.
例如
12345678
输出
8; 0
输出
1; -123456789
输出
9
说明
:
这题主要的知识点
:
如何丢弃个位数字
.
2.
给定一个整数
,
逆序输出每一位
,,
数字可能是负数
,0
或者正数
.
例如
123456789,
输出
9 8 7 6 5 4 3 2 1
例如
-123456789,
输出
-9 8 7 6 5 4 3 2 1
int
main
()
{
//int n;//4
字节
=32
位
, 2^10=1024~=1k;2^20~=100
万
=1M;2^30~=10
亿
=1G
long long
n
;
//8
//scanf("%d", &n);//error,%d
用来读取十进制整型
scanf
(
"%lld"
,
&
n
);
//printf("%lld\n",n);
long long
m
=
n
;
if
(
n
==
0
)
printf
(
"%lld
是个
1
位数
\n"
,
n
);
//else
//n = llabs(n);//
求绝对值
else if
(
n
<
0
)
n
= -
n
;
int
count
=
0
;
//
统计位数
while
(
n
!=
0
)
{
count
++
;
n
/=
10
;
//
丢弃个位
}
printf
(
"%lld
是个
%d
位数字
\n"
,
m
,
count
);
return
0
;
}
//
得到个位数字
,
然后再丢弃
int
main
()
{
long long
x
;
scanf
(
"%lld"
,
&
x
);
if
(
x
<
0
)
{
printf
(
"-"
);
x
= -
x
;
//char :-128~127,bug
}
if
(
x
==
0
)
{
printf
(
"0\n"
);
return
0
;
}
while
(
x
!=
0
)
{
printf
(
"%d "
,
x
%
10
);
//
得到个位数字
x
/=
10
;
//
丢弃个位数字
}
return
0
;
}
3.
求斐波那契
(Fibonacci)
数列的第
n
个数
,
即从键盘输入
n
则输出第
n
项的值
,n
从
1
开始。这个数列有如下特
点:第
1
、
2
两个数为
1
、
1
。从第
3
个数开始,该数是其前面两个数之和
.
例如
1,1,2,3,5,8,13,21,......
int
main
()
{
int
n
;
scanf
(
"%d"
,
&
n
);
int
f1
=
1
;
int
f2
=
1
;
int
f3
=
1
;
//
计算当前值
for
(
int
i
=
3
;
i
<=
n
;
i
++
)
{
f3
=
f1
+
f2
;
f1
=
f2
;
f2
=
f3
;
}
printf
(
"%d\n"
,
f3
);
return
0
;
}
说明
:
斐波那契额数列可以使用循环实现
,
最好不要使用递归实现
,
因为这题递归的时间复杂度太大
.
long long
Fibon
(
int
n
)
//
递归
,
太慢
O(2^n),
最不适合使用递归
{
if
(
n
<
3
)
return
1
;
return
Fibon
(
n
-
1
)
+
Fibon
(
n
-
2
);
}
int
main
()
{
for
(
int
i
=
1
;
i
<
50
;
i
++
)
{
printf
(
"%lld\n"
,
Fibon
(
i
));
}
return
0
;
}
4.
求
Sn=a+aa+aaa+…+aa…a
之值,其中
a
是一个数字,
n
表示
a
的位数,
a
和
n
由键盘输入。例如:
2+22+222+2222+22222(
此时
a=2,n=5).
int
main
()
{
int
tmp
=
0
;
//
构造的当前数字
int
sum
=
0
;
//
和
int
a
;
int
n
;
scanf
(
"%d %d"
,
&
a
,
&
n
);
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
tmp
=
tmp
*
10
+
a
;
//
构造数字
sum
+=
tmp
;
}
printf
(
"%d\n"
,
sum
);
return
0
;
}
5.
求阶乘的和
,1!+2!+3!+4!+…+n!,
其中
n
由键盘读取
.
int
main
()
{
int
tmp
=
1
;
//
当前阶乘的值
int
sum
=
0
;
//
和
int
n
;
scanf
(
"%d"
,
&
n
);
if
(
n
==
0
)
{
printf
(
"1\n"
);
return
0
;
}
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
tmp
*=
i
;
//
当前阶乘值
sum
+=
tmp
;
}
printf
(
"%d\n"
,
sum
);
return
0
;
}
1.
给定一个整数
,
顺序输出该整数每一位数字
,
数字可能是负数
,0
或者正数
.
例如
123456789,
输出
1,2,3,4,5,6,7,8,9
例如
-123456789,
输出
-1,2,3,4,5,6,7,8,9
int
main
()
{
long long
n
;
scanf
(
"%lld"
,
&
n
);
if
(
n
==
0
)
{
printf
(
"0\n"
);
return
0
;
}
else if
(
n
<
0
)
{
printf
(
"-"
);
n
= -
n
;
}
int
count
=
0
;
//
统计位数
long long
m
=
n
;
while
(
m
!=
0
)
//
得到
m
的位数
{
count
++
;
m
/=
10
;
//
丢弃个位
}
int
power
=
pow
(
10
,
count
-
1
);
//
如果
n==123456,power=100000
while
(
n
!=
0
)
{
printf
(
"%d,"
,
n
/
power
);
//
输出最高位
n
%=
power
;
//
丢弃最高位
power
/=
10
;
}
return
0
;
}
2.
输出所有的
"
水仙花数
"
,所谓
"
水仙花数
"
是指一个
3
位数,其各位数字立方和等于该数本身。 例如,
153
是水仙花数,因为
int
main
()
{
int
a
,
b
,
c
;
//
个位
,
十位
,
百位
for
(
int
i
=
100
;
i
<
1000
;
i
++
)
{
a
=
i
%
10
;
//
个位
b
=
(
i
/
10
)
%
10
;
//
十位
c
=
i
/
100
;
//
百位
if
(
a
*
a
*
a
+
b
*
b
*
b
+
c
*
c
*
c
==
i
)
{
printf
(
"%d\n"
,
i
);
}
}
return
0
;
}
3.
一个球从
100m
高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第
10
次落
地时共经过多少米,第
10
次反弹多高。
int
main
()
{
double
sum
=
100
;
//
第一次落地时经过的距离
double
high
=
100
/
2
;
//
第一次反弹的高度
for
(
int
i
=
1
;
i
<
10
;
i
++
)
{
sum
+=
high
*
2
;
high
/=
2
;
}
printf
(
"%f,%f\n"
,
sum
,
high
);
//299.609375,0.097656
return
0
;
}
4.
从键盘获取一个正整数
,
如果把它转为
16
进制的数字
,
那么它是一个几位数呢
?
如果把它转为
28
进制又是
一个几位数呢
?
例如
1234
转成十六进制是
0x4D2
那么就是
3
位数字
int
main
()
//
丢
"
个位
"
{
long long
n
;
scanf
(
"%lld"
,
&
n
);
if
(
n
==
0
)
{
printf
(
"0
转为
16
进制为
1
位数
,
转为
28
进制为
1
位数
\n"
);
return
0
;}
1.
八皇后
(
利用循环解决
)
printf
(
"
一共计算了
%d
次
\n"
,
tmp
);
printf
(
"
一共
%d
种组合
\n"
,
count
);
return
0
;
}
int
main
()
{
int
count
=
0
;
//
统计符合条件的放法
for
(
int
q1
=
0
;
q1
<
8
;
q1
++
)
//
第一个皇后能存放的位置
{
for
(
int
q2
=
0
;
q2
<
8
;
q2
++
)
//
第二个皇后能存放的位置
{
if
(
q1
==
q2
||
q1
==
q2
+
1
||
q1
==
q2
-
1
)
//
皇后
2
不能和皇后
1
冲突
{
continue
;
}
for
(
int
q3
=
0
;
q3
<
8
;
q3
++
)
//
第三个皇后能存放的位置
{
if
(
q2
==
q3
||
q2
==
q3
+
1
||
q2
==
q3
-
1
||
q3
==
q1
||
q3
==
q1
-
2
||
q3
==
q1
+
2
)
//
皇后
3
不能和前面的皇后冲突
{
continue
;
}
for
(
int
q4
=
0
;
q4
<
8
;
q4
++
)
//
下面都和上面的雷同
{
if
(
q3
==
q4
||
q3
==
q4
+
1
||
q3
==
q4
-
1
||
q4
==
q2
||
q4
==
q2
-
2
||
q4
==
q2
+
2
||
q4
==
q1
||
q4
==
q1
-
3
||
q4
==
q1
+
3
)
{
continue
;
}
for
(
int
q5
=
0
;
q5
<
8
;
q5
++
)
{
if
(
q4
==
q5
||
q4
==
q5
+
1
||
q4
==
q5
-
1
||
q5
==
q3
||
q5
==
q3
-
2
||
q5
==
q3
+
2
||
q5
==
q2
||
q5
==
q2
-
3
||
q5
==
q2
+
3
||
q5
==
q1
||
q5
==
q1
-
4
||
q5
==
q1
+
4
)
{
continue
;
}
for
(
int
q6
=
0
;
q6
<
8
;
q6
++
)
{
if
(
q6
==
q5
||
q6
==
q5
+
1
||
q6
==
q5
-
1
||
q6
==
q4
||
q6
==
q4
+
2
||
q6
==
q4
-
2
||
q6
==
q3
||
q6
==
q3
-
3
||
q6
==
q3
+
3
||
q6
==
q2
||
q6
==
q2
-
4
||
q6
==
q2
+
4
||
q6
==
q1
||
q6
==
q1
-
5
||
q6
==
q1
+
5
)
{
continue
;
}
for
(
int
q7
=
0
;
q7
<
8
;
q7
++
)
{
if
(
q7
==
q6
||
q7
==
q6
+
1
||
q7
==
q6
-
1
||
q7
==
q5
||
q7
==
q5
+
2
||
q7
==
q5
-
2
||
q7
==
q4
||
q7
==
q4
+
3
||
q7
==
q4
-
3
||
q7
==
q3
||
q7
==
q3
-
4
||
q7
==
q3
+
4
||
q7
==
q2
||
q7
==
q2
-
5
||
q7
==
q2
+
5
||
q7
==
q1
||
q7
==
q1
-
6
||
q7
==
q1
+
6
)
{
continue
;
}
for
(
int
q8
=
0
;
q8
<
8
;
q8
++
)
{
if
(
q8
==
q7
||
q8
==
q7
+
1
||
q8
==
q7
-
1
||
q8
==
q6
||
q8
==
q6
+
2
||
q8
==
q6
-
2
||
q8
==
q5
||
q8
==
q5
+
3
||
q8
==
q5
-
3
||
q8
==
q4
||
q8
==
q4
+
4
||
q8
==
q4
-
4
||
q8
==
q3
||
q8
==
q3
-
5
||
q8
==
q3
+
5
||
q8
==
q2
||
q8
==
q2
-
6
||
q8
==
q2
+
6
||
q8
==
q1
||
q8
==
q1
-
7
||
q8
==
q1
+
7
)
{
continue
;
}
printf
(
"%d %d %d %d %d %d %d %d\n"
,
q1
,
q2
,
q3
,
q4
,
q5
,
q6
,
q7
,
q8
);
//
打印不冲突
的皇后位置
count
++
;
//
统计放法数量
}
}
}
}
}
}
}
}
return
count
;
}
2.
给定一个数字
,
请构造它的回文数字
.
例如给定
1234,
输出
1234321,
给定
1357
输出
1357531
解题思路如下图
:
int
main
()
{
long long
n
;
scanf
(
"%lld"
,
&
n
);
long long
m
=
n
/
10
;
//
构造回文数字
,
不需要
n
当前的个位
while
(
m
!=
0
)
{
n
=
n
*
10
+
m
%
10
;
//
得到
m
的个位
,
并添加到
n
的后面
m
/=
10
;
//
丢弃个位
}
printf
(
"%lld\n"
,
n
);
return
0
;
}
扩展
:
和上题相似的题
,
例如
:
给定一个正整数
,
判断其是否为回文数字
.
例如
1234321->
是
,123421->
不是
3.
判断
1456789876541
是否为素数
,
是输出
"
是素数
",
不是则输出
"
不是素数
"
int
main
()
//
几乎年年都考
,
腾讯也考过
{
long long
n
=
1456789876541
;
for
(
long long
i
=
2
;
i
<
n
;
i
++
)
//
太慢
,
需要遍历
n
次
{
if
(
n
%
i
==
0
)
{
printf
(
"%lld
不是素数
\n"
,
n
);
return
0
;
}
}
printf
(
"%lld
是素数
\n"
,
n
);
return
0
;}
int
main
()
//
优化的算法
{
long long
n
=
1456789876541
;
//n=a*b,n=n^1/2*n^1/2
for
(
long long
i
=
2
;
i
<=
(
long long
)
sqrt
(
n
);
i
++
)
//
只需要遍历
n^1/2
次
{
if
(
n
%
i
==
0
)
{
printf
(
"%lld
不是素数
\n"
,
n
);
return
0
;
}
}
printf
(
"%lld
是素数
\n"
,
n
);
return
0
;
}
1.
对
10
个数组元素依次赋值为
0,1, 2,3,4,5,6,7,8,9
,要求对数组进行反转
,
即把数组的第一个值和最后一个
值交换
,
第二个和倒数第二个交换
,
依次类推
,
并输出反转后的数组
.
int
main
()
{
printf
(
"%d,%d,%d,%d\n"
,
0
,
'\0'
,
false
,
NULL
);
//
输出
0,0,0,0
return
0
;
}
int
main
()
{
int
arr
[
10
]
=
{
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
};
int
tmp
;
int
i
,
j
;
for
(
i
=
0
,
j
=
9
;
i
<
j
;
i
++
,
j
--
)
{
tmp
=
arr
[
i
];
arr
[
i
]
=
arr
[
j
];
arr
[
j
]
=
tmp
;
}
for
(
i
=
0
;
i
<
10
;
i
++
)
{
printf
(
"%d "
,
arr
[
i
]);
}
return
0
;
}
2.
定义
10
个长度的整型数组
,
从键盘获取
10
个数据保存到数组中
,
输出数组的所有数据
int
main
()
{
int
arr
[
10
];
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
scanf
(
"%d"
,
&
arr
[
i
]);
}
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
printf
(
"%d "
,
arr
[
i
]);
}
return
0
;
}
3.
求出上面数组中的最大值
,
最小值和平均值并输出
.
int
main
()
{
int
arr
[
10
];
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
scanf
(
"%d"
,
&
arr
[
i
]);
}
int
max
=
arr
[
0
];
//
最大值
int
min
=
arr
[
0
];
//
最小值
int
avg
=
arr
[
0
];
//
平均值
int
sum
=
0
;
//
和
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
if
(
arr
[
i
]
>
max
)
max
=
arr
[
i
];
if
(
arr
[
i
]
<
min
)
min
=
arr
[
i
];
sum
+=
arr
[
i
];
}
printf
(
"
最大值
=%d,
最小值
=%d,
平均值
=%.2f\n"
,
max
,
min
,
sum
/
10.0
);
return
0
;
}
4.
给你一个数组
nums
。数组「前缀和」的计算公式为:
rtSum[i] = sum(nums[0]…nums[i])
。请输出
nums
的前缀和
.
例如
nums = {1,2,3,4},
则输出
1,3,6,10,
因为缀和计算过程为
[1, 1+2, 1+2+3, 1+2+3+4]
。
例如
nums = {3,1,2,10,1},
则输出
3,4,6,16,17
2.
int
main
()
{
int
arr
[
10
]
=
{
1
,
3
,
5
,
7
,
9
,
2
,
4
,
6
,
8
,
10
};
int
sum
=
0
;
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
sum
+=
arr
[
i
];
printf
(
"%d "
,
sum
);
}
return
0
;
}