1、
/* Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,…
现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。
请你直接提交这个整数,千万不要填写任何多余的内容。
思路:问的是包含多少个蓝色,而题目中除了蓝色就是白色,正好蓝色所在行数是奇数,白色所在行是偶数。题目实质是想让我们求从21行到50行有多少个奇数。
实现方法:从21遍历到50,在这个循环中如果该数是奇数,则次数进行加1,最后打印出次数即可
*/
#include<stdio.h>
int main() {
int n=0, i;
for (i = 21; i < 51; i++) {
if (i % 2 != 0) {
n++;
}
}
printf("%d", n);
return 0;
}
//答案:15
//
//小技巧:利用数学求解,直接看我们可能不确定21到50有多少个奇数,但是从1到10,我们知道有5个奇数,对比就可以发现21到50有15个奇数
2、
//回文数
//
//问题描述
//1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
//输出格式
//按从小到大的顺序输出满足条件的四位十进制数。
#include<stdio.h>
int main() {
for (int i = 1000; i < 10000; i++) {
int a = i % 10000 / 1000;
int b = i % 1000 / 100;
int c = i % 100 / 10;
int d = i % 10;
if (a == b & c == d)
printf("%d\n", i);
}
}
3、
//加法变乘法
//
//我们都知道:1 + 2 + 3 + … + 49 = 1225
//现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
//
//比如:
//1 + 2 + 3 + … + 10 * 11 + 12 + … + 27 * 28 + 29 + … + 49 = 2015
//就是符合要求的答案。
//
//请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
//
//注意:需要你提交的是一个整数,不要填写任何多余的内容。
//
//
//
//此题思路很简单,有48个‘ + ’号,题目要求将其中两个不相邻的 ‘ + ’ 号变成 ‘ * ’ 号后式子得出的结果是2015.
//
//从第1个 ‘ + ’ 号开始遍历,依次将第1~46个 ‘ + ’ 号变成 ‘ * ’ 号,定位好第一个 ‘ + ’ 号后,定位第二个 ‘ + ’ 号,
//
//即从第一个 ‘ + ’ 号后定位第二个 ‘ + ’ 号(注意第一个 ‘ + ’ 号前面不能是 10 )。定位好两个 ‘ + ’ 号后判断式
//
//子值是否等于2015,等于跳出循环,否则继续循环。
#include<stdio.h>
int main() {
for (int i = 1; i < 30; i++)
{
for (int j = i + 2; j < 30; j++) {
if (1225-2*i-1-2*j-1+j*(j+1)+i*(i+1)==2015)printf("%d\n",i);
}
}
return 0;
}
4、
//立方尾不变
//
//有些数字的立方的末尾正好是该数字本身。
//比如:1, 4, 5, 6, 9, 24, 25, ….
//
//请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。
//
//请提交该整数,不要填写任何多余的内容。
//
//思路分析:
//这道题还是很简单的。
//只要通过枚举1 - 10000然后计算出该数的立方。在对该数立方取该数的位数
//if(该数立方 % 该数位数 == 该数)
//{
// 则算符合特征的数
//}
//
//1
//2
//3
//4
//5
//6
//7
#include <stdio.h>
#define SIZE 10000
int f(int n)
{
if (n >= 1 && n < 10) return 10;
if (n >= 10 && n <= 99) return 100;
if (n >= 100 && n <= 999) return 1000;
if (n >= 1000 && n <= 9999) return 10000;
}
int main()
{
long long sum;
long long i;
int wei = 0;
int count = 0;
for (i = 1; i < SIZE; i++)
{
wei = f(i); //返回该基数的位数
sum = (long long)(i * i * i) % wei;
if (sum == i)
{
//打印出各个符合条件的数
printf("%lld\n", sum);
count++;
}
}
printf("%d\n", count);
return 0;
}
5、
//有一堆煤球,堆成三角棱锥形。具体:
//第一层放1个,
//第二层3个(排列成三角形),
//第三层6个(排列成三角形),
//第四层10个(排列成三角形),
//…
//如果一共有100层,共有多少个煤球?
//
//输出第一百层的煤球数量。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int s = 0;
for (i = 1; i <= 100; i++)
{
s += i * (i + 1) / 2;
}
printf("%d\n", s);
return 0;
}
6、
//如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
//对新产生的正整数再做同样的处理。
//
//如此一来,你会发现,不管开始取的是什么数字,
//最终如果不是落入1,就是落入同一个循环圈。
//
//请写出这个循环圈中最大的那个数字。
//
//请填写该最大数字。
//注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
//
//输入
//没有输入。
//
//输出
//1个整数
#include <stdio.h>
int main() {
int a = 2;
int max = 0;
while (1) {
int i = 0;
while (a > 0) {
i += (a % 10) * (a % 10);
a /= 10;
}
a = i;
if (max == a)
break;
else
max = max > a ? max : a;
}
printf("%d", max);
return 0;
}
//1
//2
//3
//4
//5
//6
//7
//8
//9
//10
//11
//12
//13
//14
//15
//16
//17
//18
//19
//20
//
//答案:145
7、
//闰年判断
//
//问题描述
//
//给定一个年份,判断这一年是不是闰年。
//
//当以下情况之一满足时,这一年是闰年:
//
//年份是4的倍数而不是100的倍数;
//
//年份是400的倍数。
//
//其他的年份都不是闰年。
//输入格式
//输入包含一个整数y,表示当前的年份。
//输出格式
//输出一行,如果给定的年份是闰年,则输出yes,否则输出no。
//
//说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。
//样例输入
//2013
//样例输出
//no
//样例输入
//2016
//样例输出
//yes
//数据规模与约定
//1990 <= y <= 2050。
#include<stdio.h>
int main()
{
int year = 2016;
/* int flag=1;
while(flag)
{
scanf("%d",&year);
if(year>1990 && year<2050)
flag=0;
}*/
scanf("%d", &year);
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
printf("yes");
}
else {
printf("no");
}
printf("\n");
return 0;
}
8、
//数列特征
//
//问题描述
//
//给出n个数,找出这n个数的最大值,最小值,和。
//输入格式
//
//第一行为整数n,表示数的个数。
//
//第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
//输出格式
//输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
//样例输入
//5
//1 3 - 2 4 5
//样例输出
//5
//- 2
//11
//数据规模与约定
//1 <= n <= 10000。
int main()
{
int n, i;
int a[N];
int max, min, sum = 0; //
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
max = a[0];
min = a[0];
for (i = 0; i < n; i++)
{
if (a[i] > max)
max = a[i];
if (a[i] < min)
min = a[i];
sum += a[i];
}
printf("%d\n%d\n%d\n", max, min, sum);
return 0;
}