1. 与7无关的数字
- 查看
- 提交
- 统计
- 讨论
时间限制: 1000毫秒
内存限制: 65536千字节
题目描述: 定义一个正整数,如果它可以被7整除,或者其十进制表示中含有数字7,则认为该数与7相关。本题要求计算并返回所有不大于给定值n(n<100)且与7无关的正整数的平方和。
输入说明: 输入包括一个正整数n,范围在1到99之间。
输出说明: 输出所有不大于n且与7无关的正整数的平方和。
示例输入: 21
示例输出: 2336
#include
bool isRelatedToSeven(int number) {
if (number % 7 == 0) return true;
while (number != 0) {
if (number % 10 == 7) return true;
number /= 10;
}
return false;
}
int main() {
int n;
long long sum = 0;
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
if (!isRelatedToSeven(i)) {
sum += i * i;
}
}
printf("%lld", sum);
return 0;
}
2. Unix时间转换
- 查看
- 提交
- 统计
- 讨论
时间限制: 1000毫秒
内存限制: 65536千字节
题目描述: 在Unix系统中,时间通常以自1970年1月1日0时起经过的秒数来表示,此数值存为32位整数。编写程序将给定的Unix时间戳转换为“YYYY-MM-DD HH:MM:SS”格式。
输入说明: 输入包含多行,每行一个整数t(0≤t<2^31),代表一个Unix时间戳。
输出说明: 对每个输入的时间戳,输出一行,格式为“YYYY-MM-DD HH:MM:SS”。
示例输入: 10 1234567890
示例输出: 1970-01-01 00:00:10 2009-02-13 23:31:30
#include
#define SECONDS_IN_A_DAY 86400
#define EPOCH_YEAR 1970
struct DateTime {
int year, month, day;
int hour, minute, second;
};
bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
int daysInMonth(int year, int month) {
static int daysPerMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (mOnth== 2 && isLeapYear(year)) return 29;
return daysPerMonth[month - 1];
}
struct DateTime convertUnixTime(long timestamp) {
struct DateTime dt = {EPOCH_YEAR, 1, 1, 0, 0, 0};
int totalDays = timestamp / SECONDS_IN_A_DAY;
int remainingSecOnds= timestamp % SECONDS_IN_A_DAY;
dt.hour = remainingSeconds / 3600;
remainingSeconds %= 3600;
dt.minute = remainingSeconds / 60;
dt.secOnd= remainingSeconds % 60;
while (totalDays > 0) {
int daysInCurrentYear = isLeapYear(dt.year) ? 366 : 365;
if (totalDays >= daysInCurrentYear) {
totalDays -= daysInCurrentYear;
dt.year++;
} else {
int daysInCurrentMOnth= daysInMonth(dt.year, dt.month);
if (totalDays >= daysInCurrentMonth) {
totalDays -= daysInCurrentMonth;
dt.month++;
} else {
dt.day += totalDays;
totalDays = 0;
}
}
}
return dt;
}
int main() {
long timestamp;
while (scanf("%ld", ×tamp) != EOF) {
struct DateTime dt = convertUnixTime(timestamp);
printf("%04d-%02d-%02d %02d:%02d:%02d\n", dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
}
return 0;
}
3. 数列中的和数
- 查看
- 提交
- 统计
- 讨论
时间限制: 1000毫秒
内存限制: 65536千字节
题目描述: 给定一个整数序列,找出其中有多少个数可以表示为该序列中另外两个不同数的和。例如,在数列1 2 3 4中,有2个这样的数(3=2+1,4=1+3)。
输入说明: 第一行包含一个整数T,表示数据组数(1≤T≤100)。每组数据的第一行是一个整数n(1≤n≤100),表示数列长度;第二行是n个整数,构成数列。
输出说明: 对于每组数据,输出一行,包含一个整数,表示数列中满足条件的数的数量。
示例输入: 2
4
1 2 3 4
5
3 5 7 9 10
示例输出: 2
1
#include
int findSumNumbers(int n, int numbers[]) {
int count = 0;
for (int i = 0; i bool found = false;
for (int j = 0; j for (int k = j + 1; k if (i != j && i != k && numbers[i] == numbers[j] + numbers[k]) {
found = true;
}
}
}
if (found) count++;
}
return count;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
int numbers[n];
for (int i = 0; i scanf("%d", &numbers[i]);
}
printf("%d\n", findSumNumbers(n, numbers));
}
return 0;
}