三角形的个数
cpp
复制代码
#include <bits/stdc++.h>
using namespace std;
/*变量约束:设三边为 a < b < c(严格递增,避免重复),满足:
周长:a + b + c = n;
三角形条件:a + b > c;
正整数:a ≥ 1,b ≥ a+1,c ≥ b+1。*/
int main(){
int C;
while(cin>>C){
int count=0;
for(int i=1;i<C;i++){
for(int j=i+1;j<C;j++){
int k=C-i-j;
if(k>j&& (i+j)>k){
count++;
}
}
}
cout<<count<<endl;
}
return 0;
}
素数
cpp
复制代码
#include <bits/stdc++.h>
using namespace std;
bool if_sushu(int n){
if (n < 2) return 0;
for(int i=2;i*i<=n;i++){
if(n%i==0){
return 0;
}
}
return 1;
}
int find_sushu_num(int a,int b){
int count=0;
for(int i=a;i<=b;i++){
if(if_sushu(i)){
count++;
}
}
return count;
}
int main(){
int a,b;
while(cin>>a>>b){
cout<<find_sushu_num(a,b)<<endl;
}
return 0;
}
杨辉三角
cpp
复制代码
#include <bits/stdc++.h>
using namespace std;
void yanghui(int x){
int num[100][100]={0};
for(int i=0;i<x;i++){
num[i][0]=1;
num[i][i]=1;
for(int j=1;j<i;j++){
num[i][j]=num[i-1][j-1]+num[i-1][j];
}
}
//输出
for(int i=0;i<x;i++){
for(int j=0;j<=i;j++){
if(i==j){
cout<<num[i][j];
}else{
cout<<num[i][j]<<" ";
}
}
cout<<endl;
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int x;
cin>>x;
yanghui(x);
cout<<endl;
}
return 0;
}
矩阵问题
cpp
复制代码
#include <stdio.h>
int main()
{
int n;
int i,j;
while(scanf("%d",&n) != EOF)
{
int N=n*2+1;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{
if(i==j || i+j==N+1)
printf("1");
if(i>j && j<N+1-i)//
printf("4");
if(j<i && j>N+1-i)
printf("3");
if(i<j && i>N+1-j)
printf("5");
if(i<j && j<N+1-i)//
printf("2");
if(j<N)
printf(" ");
else
printf("\n");
}
}
return 0;
}
发牌
cpp
复制代码
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
// 1. 定义花色和玩家手牌(用二维字符数组存储,更简单)
char color[4] = {'c', 'd', 'h', 's'}; // 梅花、方块、红桃、黑桃
char player[4][13][5]; // 4个玩家,每人13张牌,每张牌最多5个字符(如"s 12")
// 2. 初始化并发牌(核心逻辑简化)
int card_idx = 0; // 牌的序号(0-51)
for (int c = 0; c < 4; c++) { // 遍历4种花色
for (int num = 0; num <= 12; num++) { // 遍历0-12的数字
int p = card_idx % 4; // 分配给第p个玩家(0=1号,1=2号,2=3号,3=4号)
// 把牌存入玩家手牌(如"c 0")
sprintf(player[p][card_idx/4], "%c %d", color[c], num);
card_idx++;
}
}
// 3. 处理输入输出(极简写法)
int n;
while (cin >> n) {
int p = n - 1; // 转成数组索引(1号→0,4号→3)
// 输出13张牌,仅中间加空格
for (int i = 0; i < 13; i++) {
if (i > 0) cout << " ";
cout << player[p][i];
}
cout << endl;
}
return 0;
}
数字金字塔
cpp
复制代码
#include <iostream>
#include <algorithm> // 用max函数
using namespace std;
int main() {
int R;
cin >> R;
// 定义二维数组存储金字塔(R行,每行最多R列)
int dp[100][100] = {0};
// 1. 输入金字塔数据
for (int i = 1; i <= R; i++) {
for (int j = 1; j <= i; j++) {
cin >> dp[i][j];
}
}
// 2. 从倒数第二行向上递推(动态规划核心)
for (int i = R - 1; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
// 自身值 + 下一行正下方/右下方的较大值
dp[i][j] += max(dp[i+1][j], dp[i+1][j+1]);
}
}
// 3. 顶部的数值就是最大和
cout << dp[1][1] << endl;
return 0;
}
稀疏矩阵
cpp
复制代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int a,b;
int num[22][22]={0};
while(cin>>a>>b){
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
cin>>num[i][j];
}
}
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
if(num[i][j]!=0){
cout<<i<<" "<<j<<" "<<num[i][j]<<endl;
}
}
}
cout<<endl;
}
return 0;
}
矩阵转换
cpp
复制代码
#include <bits/stdc++.h>
using namespace std;
void reverse(int num[11][11],int a){
int tmp=0;
for(int i=1;i<=a;i++){
for(int j=i;j<=a;j++){
tmp=num[i][j];
num[i][j]=num[j][i];
num[j][i]=tmp;
}
}
}
int main(){
int a;
int num[11][11];
//输入
while(cin>>a){
for(int i=1;i<=a;i++){
for(int j=1;j<=a;j++){
cin>>num[i][j];
}
}
reverse(num,a);
//输出
for(int i=1;i<=a;i++){
for(int j=1;j<=a;j++){
if(j==a){
cout<<num[i][j]<<endl;
}else{
cout<<num[i][j]<<" ";
}
}
}
cout<<endl;
}
return 0;
}
魔法阵
cpp
复制代码
#include <bits/stdc++.h>
using namespace std;
int n; // 全局变量存储阶数
// 保留你的核心逻辑,仅补充递归终止、修正边界/冲突逻辑
void next_magic(int &flag, int hang, int lie, int mofang[20][20]){
// 逻辑修正1:递归终止条件(填充完n²个数就停止,避免无限递归)
if(flag >= n * n){
return;
}
// 保留你的核心步骤:先算右上位置
int old_hang = hang; // 保存原位置,冲突时用
int old_lie = lie;
hang = hang - 1;
lie = lie + 1;
flag++;
// 逻辑修正2:行越界判断(<0才回绕,不是==0)
if(hang < 0){
hang = n - 1;
}
// 逻辑修正3:列越界判断(>=n才回绕,不是==n)
if(lie == n){
lie = 0;
}
// 逻辑修正4:位置有数时,回到原位置的正下方(列不变)
if(mofang[hang][lie] != 0){
hang = old_hang + 1; // 原行+1,不是当前hang+1
lie = old_lie; // 列保持不变
}
mofang[hang][lie] = flag;
next_magic(flag, hang, lie, mofang); // 语法已修正(加分号)
}
void mofang(int input_n){
n = input_n;
int mofang_arr[20][20] = {0}; // 语法已修正(数组名+初始化)
int flag = 1;
mofang_arr[0][n/2] = 1; // 1放在第一行中间列
next_magic(flag, 0, n/2, mofang_arr); // 语法已修正(传数组名)
// 输出魔方阵(保留你的输出逻辑,仅微调空行规则)
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(j > 0) cout << " ";
cout << mofang_arr[i][j];
}
cout << endl;
}
// 移除多余空行(避免多组输出时重复空行)
}
// 保留你的main函数,仅补充多组输出的空行规则(题目要求)
int main(){
int n;
int is_first = 1; // 标记是否是第一组用例
while(cin >> n){
if(!is_first){
cout << endl; // 非第一组先输出空行
}
mofang(n);
is_first = 0;
}
return 0;
}