2021-11-10

S - C语言实验——数组逆序

Description

有n个整数,使其最后m个数变成最前面的m个数,其他各数顺序向后移m(m < n < 100)个位置。

Input

输入数据有2行,第一行的第一个数为n,后面是n个整数,第二行整数m。

Output

按先后顺序输出n个整数。

Sample

Input 

5 1 2 3 4 5
2

Output 

4 5 1 2 3

代码如下:

#include<stdio.h>
#include<math.h>
#include<string.h>
#include <stdlib.h>
int main()
{
  int n,i,m,a[1005];
  scanf("%d",&n);
  for(i=0;i<n;i++)
  scanf("%d",&a[i]);
  scanf("%d",&m);
  for(i=n-m;i<n;i++)
  printf("%d ",a[i]);
  for(i=0;i<n-m;i++)
  printf("%d ",a[i]);
  return 0;

}

现有3张业务表,详见如下: 需要输出结果如下,请写出对应的MYSQL 示例1 输入: CREATE TABLE new_user( user_id int(11) NOT NULL, is_new int(11) NOT NULL, PRIMARY KEY (user_id) ); CREATE TABLE user_pay( user_id int(11) NOT NULL, pay_money int(11) NOT NULL, dt char(20) NOT NULL ); CREATE TABLE login_record( user_id int(11) NOT NULL, login_time char(20) NOT NULL, dt char(20) NOT NULL ); insert into new_user values(1,0); insert into new_user values(2,1); insert into new_user values(3,1); insert into new_user values(4,0); insert into new_user values(5,0); insert into new_user values(6,1); insert into new_user values(7,0); insert into new_user values(8,1); insert into user_pay values(1,30,'2021-11-10'); insert into user_pay values(1,100,'2021-11-10'); insert into user_pay values(2,500,'2021-11-11'); insert into user_pay values(2,200,'2021-11-12'); insert into user_pay values(3,1000,'2021-11-10'); insert into user_pay values(4,800,'2021-11-12'); insert into user_pay values(6,1200,'2021-11-10'); insert into user_pay values(6,700,'2021-11-14'); insert into login_record values(1,'8:00','2021-11-10'); insert into login_record values(1,'12:00','2021-11-10'); insert into login_record values(1,'13:00','2021-11-10'); insert into login_record values(2,'16:00','2021-11-10'); insert into login_record values(2,'12:35','2021-11-11'); insert into login_record values(2,'18:34','2021-11-12'); insert into login_record values(3,'20:00','2021-11-10'); insert into login_record values(4,'21:00','2021-11-12'); insert into login_record values(5,'21:00','2021-11-13'); insert into login_record values(6,'22:30','2021-11-10'); insert into login_record values(6,'13:30','2021-11-14'); 输出: dt dau dau_new total_pay total_pay_new 2021-11-10 4 3 2330 2200 2021-11-11 1 1 500 500 2021-11-12 2 1 1000 200 2021-11-13 1 0 0 0 2021-11-14 1 1 700 700
最新发布
05-13
### 查询语句设计 为了实现统计每天的 `dau`(每日活跃用户数)、`dau_new`(每日新增活跃用户数)、`total_pay`(总支付金额)以及 `total_pay_new`(新用户的支付金额),可以通过 MySQL 的 JOIN 和聚合函数来完成。以下是完整的 SQL 查询语句: ```sql SELECT l.dt AS dt, COUNT(DISTINCT l.user_id) AS dau, COUNT(DISTINCT CASE WHEN n.is_new = 1 THEN l.user_id END) AS dau_new, SUM(u.pay_money) AS total_pay, SUM(CASE WHEN n.is_new = 1 THEN u.pay_money ELSE 0 END) AS total_pay_new FROM login_record l LEFT JOIN new_user n ON l.user_id = n.user_id AND DATE(l.login_time) = n.create_date LEFT JOIN user_pay u ON l.user_id = u.user_id AND DATE(l.login_time) = DATE(u.pay_time) GROUP BY l.dt ORDER BY l.dt; ``` #### 解析 1. **登录记录表 (`login_record`)** - 使用 `COUNT(DISTINCT l.user_id)` 统计每日活跃用户数(即 `dau`)。[^1] 2. **新用户表 (`new_user`)** - 利用条件过滤 `CASE WHEN n.is_new = 1 THEN l.user_id END` 来计算每日新增活跃用户数(即 `dau_new`)。[^1] 3. **支付记录表 (`user_pay`)** - 使用 `SUM(u.pay_money)` 计算每日总支付金额(即 `total_pay`)。[^1] - 同时,利用条件求和 `SUM(CASE WHEN n.is_new = 1 THEN u.pay_money ELSE 0 END)` 获取新用户的支付金额(即 `total_pay_new`)。[^1] 4. **JOIN 操作** - 将 `login_record` 表分别与 `new_user` 和 `user_pay` 进行 LEFT JOIN,确保即使某天无匹配的新用户或支付记录也能返回其他统计数据。 5. **分组与排序** - 按照日期字段 `l.dt` 进行分组并按时间顺序排列结果。 --- ### 数据验证与注意事项 - 假设各表中的关键字段如下: - `login_record`: 包含 `dt`, `user_id`, `login_time` - `new_user`: 包含 `create_date`, `is_new`, `user_id` - `user_pay`: 包含 `pay_time`, `pay_money`, `user_id` - 如果存在数据质量问题(如重复记录或多对多关系),需进一步确认业务逻辑以调整查询。 --- ### 输出示例 假设输入数据为以下形式,则输出应类似于下述结构: | dt | dau | dau_new | total_pay | total_pay_new | |------------|-----|---------|-----------|---------------| | 2021-11-10 | 4 | 3 | 2330 | 2200 | | 2021-11-11 | 1 | 1 | 500 | 500 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值