zoukankan      html  css  js  c++  java
  • 标签对齐

    在一些手机网站上面会有很多很多运营加上去的标签。有的时候把这些标签对其是一件比较繁琐的事情,下面的代码可以基本实现标签的对齐。其中MAX_LEN为屏幕宽度:

    #include <stdio.h>
    #include <stdlib.h>
    #include <memory.h>
    #include <math.h>

    #define MAX_LEN 40
    #define MAX_NUM 100

    struct str{
    int len;//字符串长度
    int next;//拉链表
    };
    str strs[MAX_NUM];

    int row[MAX_NUM], size[MAX_NUM];

    void init(){
    int i, j;
    srand(1);
    for(i = 0; i < MAX_NUM; i++){
    strs[i].len = rand()%MAX_LEN+1;
    strs[i].next = -1;
    }
    memset(row, -1, sizeof(row));
    }

    int num;
    int cmp(const void *a, const void *b){
    return (*(str*)b).len - (*(str*)a).len;
    }
    void solve(){
    int i, j, tmp;
    qsort(strs, MAX_NUM, sizeof(strs[0]), cmp);

    //用贪心来解决最少行数的问题
    for(i = num = 0; i < MAX_NUM; i++){
    tmp = -1;
    for(j = 0; j < num; j++){
    if(size[j] > strs[i].len){
    if(tmp == -1 || size[j] < size[tmp]){
    tmp = j;
    }
    }
    }
    if(tmp == -1){
    size[num] = MAX_LEN;
    tmp = num++;
    }
    size[tmp] -= strs[i].len;
    strs[i].next = row[tmp];
    row[tmp] = i;
    }
    printf("一共用掉%d行\n", num);
    for(i = 0; i < num; i++){
    printf("第%2d行用掉%2d个位置:", i+1, MAX_LEN-size[i]);
    for(j = row[i]; j != -1; j = strs[j].next){
    printf("(%2d,%2d) ", j, strs[j].len);
    }
    printf("\n");
    }
    }


    int main(){
    init();
    solve();
    return 0;
    }

    其实做完这步还可以通过0-1背包来完成行与行之间差距的减少。但是但是但是。。。

    -------------------------------------------

    热烈欢迎拍砖。

  • 相关阅读:
    数据库之ORACLE常见基础操作
    数据库基础之Oracle函数
    Snuketoon [ABC217H]
    Cards [CF1278F]
    Squirrel Migration [ARC087F]
    Xor Query [ABC223H]
    Three Permutations [ABC214G]
    雨林跳跃[APIO2021]
    Redis5.0 主从模式和高可用 搭建和测试报告
    Redis5 压力测试结果反馈报告
  • 原文地址:https://www.cnblogs.com/ggzwtj/p/2185497.html
Copyright © 2011-2022 走看看