#include <iostream>
#include <algorithm>
using namespace std;
int main ()
{
int a[100];
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
int sum=0;
while(n>1)
{
i=0;
a[i]=a[i]+a[i+1];
sum+=a[i];
a[i+1]=-1;
sort(a,a+n);
for(i=0;i<n;i++)
{
a[i]=a[i+1];
}
n--;
}
printf("%d",sum);
return 0;
}
#include<stdio.h>
int judge(int n);
int judge(int n){
int a[4];
int q,g,b,s;
q = n/1000;//千位
g = n%10;//个位
b = n/100%10;//百位
s = n/10%10;//十位
if(q == g && b == s) return 1;
else return 0;
}
int main(){
int i,n;
while(scanf("%d",&n)!=EOF){
if(n>1000){
for(i=n;i<=9999;i++){
if(judge(i))
printf("%d\n",i);
}
}
else{
for(i=1000;i<=9999;i++){
if(judge(i))
printf("%d\n",i);
}
}
}
return 0;
}
#include<stdio.h>
#define MAX_SIZE 30
int main() {
int count = 0;
int i = 0, j = 0;
int n = 0, m = 0;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++) {// 输出n次
count = 0;
for (j = i % 26; j >= 1; j--) {// 降序输出
printf("%c", 'A' + j);
if (++count >= m)
break;
}
if (count >= m) {
printf("\n");
continue ;
}
for (j = 0; j < ((m - i) > 0 ? (m - i) : (m - (i % 26))); j++)// 升序输出
printf("%c", 'A' + j);
printf("\n");
}
return 0;
}
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
string s="1";
string tmp;
reverse(s.begin(),s.end());
int pl;//进位值
for(int i=2;i<=n;i++){
pl=0;
for(int j=0;j<s.length();j++){
int k=s[j]-'0';
s[j]=((s[j]-'0')*i+pl)%10+'0';
pl=(k*i+pl)/10;
}
if(pl){
tmp=to_string(pl);
reverse(tmp.begin(),tmp.end());
s+=tmp;
}
}
reverse(s.begin(),s.end());
cout<<s;
}
/*
T5 回形取数
算法概述:一圈一圈输出,每一圈分别按左下右上的顺序输出
*/
#include<stdio.h>
#define MAX_SIZE 205
int main() {
int layer = 0;// 表示当前处于矩阵的第几圈
int m = 4, n = 3;
int i = 0, j = 0;
int matrix[MAX_SIZE][MAX_SIZE];
scanf("%d%d", &m, &n);
for (i = 1; i <= m; i++) {
for (j = 1; j <= n; j++) {
scanf("%d", &matrix[i][j]);
}
}
i = 0, layer = 1;
while (i < m * n) {
for (j = layer; j <= m - layer + 1 && i < m * n; j++) {// 左
if (layer == 1 && j == 1)// 第一个输出,特殊处理
printf("%d", matrix[j][layer]);
else
printf(" %d", matrix[j][layer]);
i++;
}
for (j = layer + 1; j <= n - layer && i < m * n; j++) {// 下
printf(" %d", matrix[m - layer + 1][j]);
i++;
}
for (j = m - layer + 1; j >= layer && i < m * n; j--) {// 右
printf(" %d", matrix[j][n - layer + 1]);
i++;
}
for (j = m - layer; j >= layer + 1 && i < m * n; j--) {// 上
printf(" %d", matrix[layer][j]);
i++;
}
layer++;
}
return 0;
}
#include<stdio.h>
int main() {
int time = 0;// 用于计时
int turDis = 0, rabDis = 0;// 龟和兔子跑的距离
int lastReTime = 0;// 兔子上一次休息时间
int v1 = 99, v2 = 53, t = 171, s = 10, l = 5247;
scanf("%d%d%d%d%d", &v1, &v2, &t, &s, &l);
time = 0;// 开始计时
while (1) {
turDis += v2;// 龟一直跑
if (time == 0) {// 第一秒兔子肯定会跑
rabDis += v1;
if (turDis == l || rabDis == l) {// 判断是否已到终点
time++;
break;
}
if (rabDis - turDis >= t) {// 领先,休息
lastReTime = time + 1;
}
time++;
continue;
}
if (lastReTime == 0) {// 没休息过,说明前面一直不领先,继续跑
rabDis += v1;// 跑
if (turDis == l || rabDis == l) {// 判断是否已到终点
time++;
break;
}
if (rabDis - turDis >= t) {// 领先
lastReTime = time + 1;// 休息
}
time++;
continue;
}
if (time - lastReTime >= s) {// 检查休息时间是否结束
if (rabDis - (turDis - v2) < t) {// 未领先t米
rabDis += v1;// 跑
if (turDis == l || rabDis == l) {// 判断是否已到终点
time++;
break;
}
}
else {// 领先
lastReTime = time;// 休息
}
}
if (turDis == l || rabDis == l) {// 判断是否已到终点
time++;
break;
}
time++;
}
if (turDis < rabDis)
printf("R\n");
else if (turDis > rabDis)
printf("T\n");
else
printf("D\n");
printf("%d\n", time);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
void An(int n)
{
int i;
for (i = 1;i <= n;i++)
{
cout << "sin("<<i;
if (i % 2 == 0 && i != n)
cout << "-";
if (i % 2 && i != n)
cout << "+";
}
for (i = 1;i <= n;i++)
cout << ")";
}
void Sn(int n) //进行外部的运算,格式标准输出
{
int i;
for (i = 1;i < n;i++)
{
cout << "(";
}
for (i = 1;i <= n;i++)
{
An(i);
cout << "+" << n - i + 1;
if (i - n)
cout << ")";
}
}
int main()
{
int n;
cin >> n;
Sn(n);
}
算法概述:判断第二个矩形有没有点a在第一个矩形范围内(某个点a的横坐标大于
第一个矩形横坐标较小的点小于横坐标较大的点,并且a的纵坐标同样满足要求,那么
点a在第一个矩形范围内),若有,则求出相交范围的长和宽即可(长:第一个矩形横
坐标的较大者减去a点的横坐标;宽:按照求长同样的方法求得)
#include<stdio.h>
#include<math.h>
void swap(double *a, double *b);
int main() {
int flag = 0;// 标记两矩形有无交点
double area = 0;// 相交的面积
double area1 = 0, area2 = 0;
double x = 0, y = 0;// 在第一个矩形内部的点
double x11 = 0, y11 = 0, x12 = 0, y12 = 0;// 第一个矩形
double x21 = 0, y21 = 0, x22 = 0, y22 = 0;// 第二个矩形
scanf("%lf%lf%lf%lf", &x11, &y11, &x12, &y12);
scanf("%lf%lf%lf%lf", &x21, &y21, &x22, &y22);
// 统一处理成给定的点一个在左下,一个在右上的方式
if (x11 > x12)
swap(&x11, &x12);
if (y11 > y12)
swap(&y11, &y12);
if (x21 > x22)
swap(&x21, &x22);
if (y21 > y22)
swap(&y21, &y22);
if (((x21 >= x11 && x21 <= x12) && (x22 >= x11 && x22 <= x12)) ||
((x11 >= x21 && x11 <= x22) && (x12 >= x21 && x12 <= x22))) {// 特殊情况,有一个矩形在另一个矩形内部
area1 = (x12 - x11) * (y12 - y11);
area2 = (x22 - x21) * (y22 - y21);
area = area1 > area2 ? area2 : area1;
printf("%.2f", area);
flag = 1;
return 0;
}
if ((x21 >= x11 && x21 <= x12) &&
(y21 >= y11 && y21 <= y12)) {
x = x21, y = y21;
area = (x12 - x) * (y12 - y);
flag = 1;
printf("%.2f", area);
return 0;
}
if ((x22 >= x11 && x22 <= x12) &&
(y22 >= y11 && y22 <= y12)) {
x = x22, y = y22;
area = (x - x11) * (y - y11);
flag = 1;
printf("%.2f", area);
return 0;
}
if ((x22 >= x11 && x22 <= x12) &&
(y21 >= y11 && y21 <= y12)) {
x = x22, y = y21;
area = (x - x11) * (y12 - y);
flag = 1;
printf("%.2f", area);
return 0;
}
if ((x21 >= x11 && x21 <= x12) &&
(y22 >= y11 && y22 <= y12)) {
x = x21, y = y22;
area = (x12 - x) * (y - y11);
flag = 1;
printf("%.2f", area);
return 0;
}
if (!flag)
printf("0.00");
return 0;
}
// 交换两个数
void swap(double *a, double *b) {
double temp = *a;
*a = *b;
*b = temp;
}
#include<bits/stdc++.h>
using namespace std;
int a[50][50],c[50][50],b[50][50];
int main()
{
//freopen("in.txt","r",stdin);
int n,m,i,j,k,x;
scanf("%d %d",&n,&m);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf("%d",&a[i][j]);
memset(c,0,sizeof(c));
for (i=0;i<n;i++)
c[i][i] = 1;//单位矩阵
while(m--)
{
for (k=0;k<n;k++)
{
for (i=0;i<n;i++)
{
x = 0;
for(j=0;j<n;j++)
x += c[i][j] * a[j][k];
b[i][k] = x;
}
}
for (i=0;i<n;i++)
for (j=0;j<n;j++)
c[i][j] = b[i][j];
}
for (i=0;i<n;i++)
{
for (j=0;j<n-1;j++)
printf("%d ",c[i][j]);
printf("%d\n",c[i][n-1]);
}
return 0;
}
#include<stdio.h>
#include<math.h>
#define MAX_SIZE 10005
int isPrime[MAX_SIZE] = {0};// 素数表,isPrime[i]= 1标记i是素数
void createPrimeTable();
int main() {
int temp = 0, flag = 0;
int i = 0, j = 0, k = 0;
int a = 0, b = 0;
createPrimeTable();
scanf("%d%d", &a, &b);
for (i = a; i <= b; i++) {
printf("%d", i);
flag = 0;
for (j = 2; j <= sqrt(i); j++) {// 寻找质因数
if (isPrime[j] == 1 && i % j == 0) {
flag = 1;
printf("=%d", j);
temp = i / j;
if (isPrime[temp]) {// 已经分解完了,结束
printf("*%d", temp);
break;
}
while (isPrime[temp] == 0) {// 分解
for (k = j; k <= sqrt(temp); k++) {
if (isPrime[k] == 1 && temp % k == 0) {
printf("*%d", k);
temp = temp / k;
break;
}
}
}
if (isPrime[temp])// 处理尾部
printf("*%d", temp);
break;
}
}
if (!flag)
printf("=%d", i);
printf("\n");
}
return 0;
}
// 建立素数表
void createPrimeTable() {
int i = 0, j = 0;
for (j = 0; j < MAX_SIZE; j++)// 初始时标记全为素数
isPrime[j] = 1;
i = 2;
while (i < MAX_SIZE - 1) {
if (isPrime[i]) {
for (j = 2; i * j < MAX_SIZE; j++) {
isPrime[i * j] = 0;
}
}
i++;
}
}